From: Pádraig Brady
Date: Mon, 8 Dec 2014 09:46:38 +0000 (+0000) Subject: vasnprintf: fix potential incorrect errno X-Git-Tag: v1.0~7239 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=ec6a60bfd9ba0f12ec07809636891909ee7ded66;p=gnulib.git vasnprintf: fix potential incorrect errno An adjustment of the previous commit c5c4f53b. * lib/vasnprintf.c (VASNPRINTF): free() generally doesn't set errno, but it can potentially in certain edge cases. Reported by Eric Blake. --- diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c index 223be0763a..a73fad60b4 100644 --- a/lib/vasnprintf.c +++ b/lib/vasnprintf.c @@ -5179,18 +5179,21 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, /* SNPRINTF or sprintf failed. Save and use the errno that it has set, if any. */ int saved_errno = errno; + if (saved_errno == 0) + { + if (dp->conversion == 'c' || dp->conversion == 's') + saved_errno = EILSEQ; + else + saved_errno = EINVAL; + } if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); - errno = - (saved_errno != 0 - ? saved_errno - : (dp->conversion == 'c' || dp->conversion == 's' - ? EILSEQ - : EINVAL)); CLEANUP (); + + errno = saved_errno; return NULL; }