diff options
author | Rich Felker <dalias@aerifal.cx> | 2023-03-22 12:56:46 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2023-03-22 12:56:46 -0400 |
commit | 1d5750b95c06913a1f18a995481276d698d20fae (patch) | |
tree | a64fe442a196ad0d6cfa6c61d330b85507361f90 /src/stdio | |
parent | 0e5234807dcdc76c43f9313c6ba9e2b7da408d8c (diff) | |
download | musl-1d5750b95c06913a1f18a995481276d698d20fae.zip musl-1d5750b95c06913a1f18a995481276d698d20fae.tar.gz musl-1d5750b95c06913a1f18a995481276d698d20fae.tar.bz2 |
fix swprintf handling of nul character in output
the buffer-flush function did not account for mbtowc returning 0
rather than 1 when converting the nul character. this prevented
advancing past it, instead repeatedly converting it into the output
wide character string until the max output length was exhausted.
Diffstat (limited to 'src/stdio')
-rw-r--r-- | src/stdio/vswprintf.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/stdio/vswprintf.c b/src/stdio/vswprintf.c index 7f98c5c..fc223cf 100644 --- a/src/stdio/vswprintf.c +++ b/src/stdio/vswprintf.c @@ -18,6 +18,7 @@ static size_t sw_write(FILE *f, const unsigned char *s, size_t l) if (s!=f->wbase && sw_write(f, f->wbase, f->wpos-f->wbase)==-1) return -1; while (c->l && l && (i=mbtowc(c->ws, (void *)s, l))>=0) { + if (!i) i=1; s+=i; l-=i; c->l--; |