diff options
author | William Pitcock <nenolod@dereferenced.org> | 2017-10-12 00:51:20 +0000 |
---|---|---|
committer | William Pitcock <nenolod@dereferenced.org> | 2017-10-12 00:51:20 +0000 |
commit | afdba0ba0b8c0e92c376e7f1bfb151c07bf654b6 (patch) | |
tree | 8b8e5b58057c394a57e427ba8776a933c8377335 /main/musl/0059-fix-erroneous-stop-before-input-limit-in-mbsnrtowcs-.patch | |
parent | ba95a098380de3c708a38dbecc0a8aae077d7574 (diff) | |
download | aports-afdba0ba0b8c0e92c376e7f1bfb151c07bf654b6.tar.bz2 aports-afdba0ba0b8c0e92c376e7f1bfb151c07bf654b6.tar.xz |
main/musl: update to alpine version 1.1.16-r21
- incorporate unreleased upstream bugfixes from august to present:
- fix OOB reads in memmem implementations
- fix undefined behaviour in memset
- fix memory leak in clearenv
- fix unicode processing bugs
- fix signal masking issue with pthread_create
- fix glob descent with GLOB_PERIOD
- implement fopencookie(3)
Diffstat (limited to 'main/musl/0059-fix-erroneous-stop-before-input-limit-in-mbsnrtowcs-.patch')
-rw-r--r-- | main/musl/0059-fix-erroneous-stop-before-input-limit-in-mbsnrtowcs-.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/main/musl/0059-fix-erroneous-stop-before-input-limit-in-mbsnrtowcs-.patch b/main/musl/0059-fix-erroneous-stop-before-input-limit-in-mbsnrtowcs-.patch new file mode 100644 index 0000000000..65b1cab4c1 --- /dev/null +++ b/main/musl/0059-fix-erroneous-stop-before-input-limit-in-mbsnrtowcs-.patch @@ -0,0 +1,78 @@ +From 11ddc314b57196519316103b02acffe10299dad3 Mon Sep 17 00:00:00 2001 +From: Rich Felker <dalias@aerifal.cx> +Date: Thu, 31 Aug 2017 14:30:28 -0400 +Subject: [PATCH 1/2] fix erroneous stop before input limit in mbsnrtowcs and + wcsnrtombs + +the value computed as an output limit that bounds the amount of input +consumed below the input limit was incorrectly being used as the +actual amount of input consumed. instead, compute the actual amount of +input consumed as a difference of pointers before and after the +conversion. + +patch by Mikhail Kremnyov. +--- + src/multibyte/mbsnrtowcs.c | 4 +++- + src/multibyte/wcsnrtombs.c | 4 +++- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/multibyte/mbsnrtowcs.c b/src/multibyte/mbsnrtowcs.c +index cae4caa2..931192e2 100644 +--- a/src/multibyte/mbsnrtowcs.c ++++ b/src/multibyte/mbsnrtowcs.c +@@ -5,6 +5,7 @@ size_t mbsnrtowcs(wchar_t *restrict wcs, const char **restrict src, size_t n, si + size_t l, cnt=0, n2; + wchar_t *ws, wbuf[256]; + const char *s = *src; ++ const char *tmp_s; + + if (!wcs) ws = wbuf, wn = sizeof wbuf / sizeof *wbuf; + else ws = wcs; +@@ -15,7 +16,7 @@ size_t mbsnrtowcs(wchar_t *restrict wcs, const char **restrict src, size_t n, si + + while ( s && wn && ( (n2=n/4)>=wn || n2>32 ) ) { + if (n2>=wn) n2=wn; +- n -= n2; ++ tmp_s = s; + l = mbsrtowcs(ws, &s, n2, st); + if (!(l+1)) { + cnt = l; +@@ -26,6 +27,7 @@ size_t mbsnrtowcs(wchar_t *restrict wcs, const char **restrict src, size_t n, si + ws += l; + wn -= l; + } ++ n = s ? n - (s - tmp_s) : 0; + cnt += l; + } + if (s) while (wn && n) { +diff --git a/src/multibyte/wcsnrtombs.c b/src/multibyte/wcsnrtombs.c +index 640cbbeb..676932b5 100644 +--- a/src/multibyte/wcsnrtombs.c ++++ b/src/multibyte/wcsnrtombs.c +@@ -5,13 +5,14 @@ size_t wcsnrtombs(char *restrict dst, const wchar_t **restrict wcs, size_t wn, s + size_t l, cnt=0, n2; + char *s, buf[256]; + const wchar_t *ws = *wcs; ++ const wchar_t *tmp_ws; + + if (!dst) s = buf, n = sizeof buf; + else s = dst; + + while ( ws && n && ( (n2=wn)>=n || n2>32 ) ) { + if (n2>=n) n2=n; +- wn -= n2; ++ tmp_ws = ws; + l = wcsrtombs(s, &ws, n2, 0); + if (!(l+1)) { + cnt = l; +@@ -22,6 +23,7 @@ size_t wcsnrtombs(char *restrict dst, const wchar_t **restrict wcs, size_t wn, s + s += l; + n -= l; + } ++ wn = ws ? wn - (ws - tmp_ws) : 0; + cnt += l; + } + if (ws) while (n && wn) { +-- +2.13.3 + |