diff options
author | Kees Cook <keescook@chromium.org> | 2012-03-05 10:18:17 +0100 |
---|---|---|
committer | Andreas Jaeger <aj@suse.de> | 2012-03-05 10:18:17 +0100 |
commit | fa0355175d60ccf610c98f2345504603d3b8ea57 (patch) | |
tree | 10ad4fc79eb0eb41ad9db1c7b63500be5af8d550 /stdio-common | |
parent | 7c1f4834d398163d1ac8101e35e9c36fc3176e6e (diff) | |
download | glibc-fa0355175d60ccf610c98f2345504603d3b8ea57.tar.gz glibc-fa0355175d60ccf610c98f2345504603d3b8ea57.tar.xz glibc-fa0355175d60ccf610c98f2345504603d3b8ea57.zip |
2012-03-02 Kees Cook <keescook@chromium.org>
* stdio-common/vfprintf.c (vfprintf): add missing errno settings.
Diffstat (limited to 'stdio-common')
-rw-r--r-- | stdio-common/vfprintf.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index c802e46349..85d19005d2 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -822,7 +822,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) \ if (function_done < 0) \ { \ - /* Error in print handler. */ \ + /* Error in print handler; up to handler to set errno. */ \ done = -1; \ goto all_done; \ } \ @@ -876,7 +876,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) \ if (function_done < 0) \ { \ - /* Error in print handler. */ \ + /* Error in print handler; up to handler to set errno. */ \ done = -1; \ goto all_done; \ } \ @@ -1117,7 +1117,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) &mbstate); \ if (len == (size_t) -1) \ { \ - /* Something went wron gduring the conversion. Bail out. */ \ + /* Something went wrong during the conversion. Bail out. */ \ done = -1; \ goto all_done; \ } \ @@ -1188,6 +1188,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) if (__mbsnrtowcs (ignore, &str2, strend - str2, \ ignore_size, &ps) == (size_t) -1) \ { \ + /* Conversion function has set errno. */ \ done = -1; \ goto all_done; \ } \ @@ -1605,6 +1606,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) if (spec == L_('\0')) { /* The format string ended before the specifier is complete. */ + __set_errno (EINVAL); done = -1; goto all_done; } @@ -1948,6 +1950,7 @@ do_positional: about # of chars. */ if (function_done < 0) { + /* Function has set errno. */ done = -1; goto all_done; } @@ -1982,6 +1985,7 @@ do_positional: of chars. */ if (function_done < 0) { + /* Function has set errno. */ done = -1; goto all_done; } |