Mercurial > hg > octave-nkf > gnulib-hg
changeset 17819:2c202161ad79
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.
author | Pádraig Brady <P@draigBrady.com> |
---|---|
date | Mon, 08 Dec 2014 09:46:38 +0000 |
parents | 734596c36b58 |
children | 5ca75b20ebc2 |
files | lib/vasnprintf.c |
diffstat | 1 files changed, 9 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/vasnprintf.c +++ b/lib/vasnprintf.c @@ -5179,18 +5179,21 @@ /* 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; }