|
Message-Id: <20170709210018.16369-1-b.brachaczek@gmail.com> Date: Sun, 9 Jul 2017 23:00:18 +0200 From: Bartosz Brachaczek <b.brachaczek@...il.com> To: musl@...ts.openwall.com Cc: Bartosz Brachaczek <b.brachaczek@...il.com> Subject: [PATCH] handle whitespace before %% in scanf this is mandated by C and POSIX standards and is in accordance with glibc behavior. --- src/stdio/vfscanf.c | 10 +++++++--- src/stdio/vfwscanf.c | 8 ++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/stdio/vfscanf.c b/src/stdio/vfscanf.c index d4d2454b..9e030fc4 100644 --- a/src/stdio/vfscanf.c +++ b/src/stdio/vfscanf.c @@ -89,15 +89,19 @@ int vfscanf(FILE *restrict f, const char *restrict fmt, va_list ap) continue; } if (*p != '%' || p[1] == '%') { - p += *p=='%'; shlim(f, 0); - c = shgetc(f); + if (*p == '%') { + p++; + while (isspace((c=shgetc(f)))); + } else { + c = shgetc(f); + } if (c!=*p) { shunget(f); if (c<0) goto input_fail; goto match_fail; } - pos++; + pos += shcnt(f); continue; } diff --git a/src/stdio/vfwscanf.c b/src/stdio/vfwscanf.c index ad8e2b9a..5d387a2d 100644 --- a/src/stdio/vfwscanf.c +++ b/src/stdio/vfwscanf.c @@ -117,8 +117,12 @@ int vfwscanf(FILE *restrict f, const wchar_t *restrict fmt, va_list ap) continue; } if (*p != '%' || p[1] == '%') { - p += *p=='%'; - c = getwc(f); + if (*p == '%') { + p++; + while (iswspace((c=getwc(f)))) pos++; + } else { + c = getwc(f); + } if (c!=*p) { ungetwc(c, f); if (c<0) goto input_fail; -- 2.13.0
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.