fix swprintf internal buffer state and error handling
the swprintf write callback never reset its buffer pointers, so after its 256-byte buffer filled up, it would keep repeating those bytes over and over in the output until the destination buffer filled up. it also failed to set the error indicator for the stream on EILSEQ, potentially allowing output to continue after the error.
This commit is contained in:
@@ -24,7 +24,14 @@ static size_t sw_write(FILE *f, const unsigned char *s, size_t l)
|
||||
c->ws++;
|
||||
}
|
||||
*c->ws = 0;
|
||||
return i<0 ? i : l0;
|
||||
if (i < 0) {
|
||||
f->wpos = f->wbase = f->wend = 0;
|
||||
f->flags |= F_ERR;
|
||||
return i;
|
||||
}
|
||||
f->wend = f->buf + f->buf_size;
|
||||
f->wpos = f->wbase = f->buf;
|
||||
return l0;
|
||||
}
|
||||
|
||||
int vswprintf(wchar_t *restrict s, size_t n, const wchar_t *restrict fmt, va_list ap)
|
||||
|
||||
Reference in New Issue
Block a user