From b5fc51198bf451885e6411bae9b25890a5b6fbe2 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 7 Feb 2013 16:06:54 +0100 Subject: vasprintf: do not use xmalloc, it will deadlock on OOM Signed-off-by: Denys Vlasenko --- libbb/platform.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libbb/platform.c b/libbb/platform.c index 2bf34f5bc..d241d25a7 100644 --- a/libbb/platform.c +++ b/libbb/platform.c @@ -28,14 +28,16 @@ int FAST_FUNC vasprintf(char **string_ptr, const char *format, va_list p) r = vsnprintf(buf, 128, format, p); va_end(p); + /* Note: can't use xstrdup/xmalloc, they call vasprintf (us) on failure! */ + if (r < 128) { va_end(p2); - *string_ptr = xstrdup(buf); + *string_ptr = strdup(buf); return r; } - *string_ptr = xmalloc(r+1); - r = vsnprintf(*string_ptr, r+1, format, p2); + *string_ptr = malloc(r+1); + r = (*string_ptr ? vsnprintf(*string_ptr, r+1, format, p2) : -1); va_end(p2); return r; -- cgit v1.2.3