diff options
author | Rich Felker <dalias@aerifal.cx> | 2020-04-24 10:35:01 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2020-04-24 10:39:17 -0400 |
commit | f3ecdc1043f44468b2db794b259c5f66737f6f84 (patch) | |
tree | 0a0487d6907041d437b6a64fea9e70338b17b71b | |
parent | 043c6e31d9135c27875a1ccb4c0f1638f0170e77 (diff) | |
download | musl-f3ecdc1043f44468b2db794b259c5f66737f6f84.tar.gz musl-f3ecdc1043f44468b2db794b259c5f66737f6f84.tar.bz2 musl-f3ecdc1043f44468b2db794b259c5f66737f6f84.tar.xz musl-f3ecdc1043f44468b2db794b259c5f66737f6f84.zip |
fix undefined behavior in wcsto[ld] family functions
analogous to commit b287cd745c2243f8e5114331763a5a9813b5f6ee but for
the custom FILE stream type the wcstol and wcstod family use. __toread
could be used here as well, but there's a simple direct fix to make
the buffer pointers initially valid for subtraction, so just do that
to avoid pulling in stdio exit code in programs that don't use stdio.
-rw-r--r-- | src/stdlib/wcstod.c | 3 | ||||
-rw-r--r-- | src/stdlib/wcstol.c | 3 |
2 files changed, 2 insertions, 4 deletions
diff --git a/src/stdlib/wcstod.c b/src/stdlib/wcstod.c index 26fe9af8..0deb7010 100644 --- a/src/stdlib/wcstod.c +++ b/src/stdlib/wcstod.c @@ -33,8 +33,7 @@ static long double wcstox(const wchar_t *s, wchar_t **p, int prec) unsigned char buf[64]; FILE f = {0}; f.flags = 0; - f.rpos = f.rend = 0; - f.buf = buf + 4; + f.rpos = f.rend = f.buf = buf + 4; f.buf_size = sizeof buf - 4; f.lock = -1; f.read = do_read; diff --git a/src/stdlib/wcstol.c b/src/stdlib/wcstol.c index 4443f577..1eeb495f 100644 --- a/src/stdlib/wcstol.c +++ b/src/stdlib/wcstol.c @@ -35,8 +35,7 @@ static unsigned long long wcstox(const wchar_t *s, wchar_t **p, int base, unsign unsigned char buf[64]; FILE f = {0}; f.flags = 0; - f.rpos = f.rend = 0; - f.buf = buf + 4; + f.rpos = f.rend = f.buf = buf + 4; f.buf_size = sizeof buf - 4; f.lock = -1; f.read = do_read; |