From 2912f9f2a2e5997df069d38e20d85ff4cc51acef Mon Sep 17 00:00:00 2001 From: Koen Vandeputte Date: Thu, 22 Dec 2016 17:17:04 +0100 Subject: musl: backport various post-1.1.15 fixes Backport most important fixes up to latest HEAD - Taken post-commit reverts/fixes into account Compile tested Run-tested on cns3xxx & imx6 targets Signed-off-by: Koen Vandeputte --- ...-internal-buffer-state-and-error-handling.patch | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 toolchain/musl/patches/066-fix-swprintf-internal-buffer-state-and-error-handling.patch (limited to 'toolchain/musl/patches/066-fix-swprintf-internal-buffer-state-and-error-handling.patch') diff --git a/toolchain/musl/patches/066-fix-swprintf-internal-buffer-state-and-error-handling.patch b/toolchain/musl/patches/066-fix-swprintf-internal-buffer-state-and-error-handling.patch new file mode 100644 index 0000000000..a6e7c7f5b0 --- /dev/null +++ b/toolchain/musl/patches/066-fix-swprintf-internal-buffer-state-and-error-handling.patch @@ -0,0 +1,36 @@ +From 7442442ccc665641a8827177e8e7ed45bbbd6584 Mon Sep 17 00:00:00 2001 +From: Rich Felker +Date: Mon, 7 Nov 2016 20:39:59 -0500 +Subject: 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. +--- + src/stdio/vswprintf.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/stdio/vswprintf.c b/src/stdio/vswprintf.c +index 7d237ba..6eb2f6a 100644 +--- a/src/stdio/vswprintf.c ++++ b/src/stdio/vswprintf.c +@@ -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) +-- +cgit v0.11.2 -- cgit v1.2.3