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 | |
parent | 0e5234807dcdc76c43f9313c6ba9e2b7da408d8c (diff) | |
download | musl-1d5750b95c06913a1f18a995481276d698d20fae.tar.gz musl-1d5750b95c06913a1f18a995481276d698d20fae.tar.xz musl-1d5750b95c06913a1f18a995481276d698d20fae.zip |
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.
-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 7f98c5c9..fc223cf2 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--; |