fix swprintf handling of nul character in output
authorRich Felker <dalias@aerifal.cx>
Wed, 22 Mar 2023 16:56:46 +0000 (12:56 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 22 Mar 2023 16:56:46 +0000 (12:56 -0400)
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.

src/stdio/vswprintf.c

index 7f98c5c..fc223cf 100644 (file)
@@ -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--;