Update musl C library to 1.2.6. Fixes CVE-2025-26519 * Patches refreshed. Unnecessary upstream patch removed. * Add a post-release patch for timezone handling in datetime string matching (affecting at least uhttpd): bug report: https://www.openwall.com/lists/musl/2026/03/22/3 fix: https://www.openwall.com/lists/musl/2026/03/30/6 1.2.6 release notes https://git.musl-libc.org/cgit/musl/tree/WHATSNEW?id=9fa28ece75d8a2191de7c5bb53bed224c5947417 new features: - posix_getdents interface (new in POSIX-2024) - renameat2 interface (linux extension) - iconv support for CP858 - vdso clock_gettime for riscv{32,64}, powerpc{,64}, and s390x - loongarch64 TLSDESC support - exposed __getauxval for compiler runtime use detecting cpu features compatibility: - initgroups no longer artificially limits number of supplementary groups - getusershell now skips blank lines and comments - exit is now explicitly thread-safe (possible future requirement) - atexit now fails rather than deadlocking if called from late dtor - strerror now has error strings for EUCLEAN and ENAVAIL - isatty no longer collapses errors to ENOTTY - sched.h namespace pollution with _GNU_SOURCE is reduced - hasmntopt now matches only whole options, not arbitrary substrings - shadow.h no longer declares an unimplemented sgetspent interface - vdso with missing sysv hash table (only gnu hash) is now supported conformance: - pwrite now handles O_APPEND correctly, reports error if it can't - mbnrtowcs now conforms to new POSIX-2024 requirement for partial character - iconv GBK now properly includes euro symbol - strptime now accepts conversion specifiers added in POSIX-2024 - inet_ntop IPv6 "zero compression" now conforms to RFC 5952 bugs fixed: - iconv euc-kr decoder could do oob writes on invalid inputs (CVE-2025-26519) - iconv shift_jis decoder could produce wrong outputs for some invalid inputs - printf did not honor hex float precision correctly in some cases - lost or delayed wakes in sem_post under race condition - termios input speed handling was wrong - strcasestr failed to match zero-length needle - fma handled corner case with negative zero wrongly - syslog LOG_MAKEPRI macro was incorrect - timer_create is no longer affected by known pthread_barrier bugs - sysconf(_SC_MINSIGSTKSZ) computed min size incorrectly - statx emulation left some fields uninitialized - mntent wrongly included final newline in parsed field output - SIGEV_THREAD timers could abort process if SIGTIMER became unblocked - bind_textdomain_codeset returned wrong value arch-specific bugs fixed: - early dynamic linker handled page size wrong on dynamic pagesize archs - arm and aarch64 crti/n files had wrong alignment - m68k POLLWRNORM and POLLWRBAND values were incorrect - x32 mq ABI was mismatched Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi> Link: https://github.com/openwrt/openwrt/pull/22547 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
101 lines
2.4 KiB
Diff
101 lines
2.4 KiB
Diff
--- a/src/locale/iconv.c
|
|
+++ b/src/locale/iconv.c
|
|
@@ -48,6 +48,7 @@ static const unsigned char charmaps[] =
|
|
"utf16\0\0\312"
|
|
"ucs4\0utf32\0\0\313"
|
|
"ucs2\0\0\314"
|
|
+#ifdef FULL_ICONV
|
|
"eucjp\0\0\320"
|
|
"shiftjis\0sjis\0cp932\0\0\321"
|
|
"iso2022jp\0\0\322"
|
|
@@ -56,6 +57,7 @@ static const unsigned char charmaps[] =
|
|
"gb2312\0\0\332"
|
|
"big5\0bigfive\0cp950\0big5hkscs\0\0\340"
|
|
"euckr\0ksc5601\0ksx1001\0cp949\0\0\350"
|
|
+#endif
|
|
#include "codepages.h"
|
|
;
|
|
|
|
@@ -66,6 +68,7 @@ static const unsigned short legacy_chars
|
|
#include "legacychars.h"
|
|
};
|
|
|
|
+#ifdef FULL_ICONV
|
|
static const unsigned short jis0208[84][94] = {
|
|
#include "jis0208.h"
|
|
};
|
|
@@ -89,6 +92,7 @@ static const unsigned short hkscs[] = {
|
|
static const unsigned short ksc[93][94] = {
|
|
#include "ksc.h"
|
|
};
|
|
+#endif
|
|
|
|
static const unsigned short rev_jis[] = {
|
|
#include "revjis.h"
|
|
@@ -209,6 +213,7 @@ static unsigned legacy_map(const unsigne
|
|
return x < 256 ? x : legacy_chars[x-256];
|
|
}
|
|
|
|
+#ifdef FULL_ICONV
|
|
static unsigned uni_to_jis(unsigned c)
|
|
{
|
|
unsigned nel = sizeof rev_jis / sizeof *rev_jis;
|
|
@@ -227,6 +232,7 @@ static unsigned uni_to_jis(unsigned c)
|
|
}
|
|
}
|
|
}
|
|
+#endif
|
|
|
|
#define countof(a) (sizeof (a) / sizeof *(a))
|
|
|
|
@@ -325,6 +331,7 @@ size_t iconv(iconv_t cd, char **restrict
|
|
}
|
|
type = scd->state;
|
|
continue;
|
|
+#ifdef FULL_ICONV
|
|
case SHIFT_JIS:
|
|
if (c < 128) break;
|
|
if (c-0xa1 <= 0xdf-0xa1) {
|
|
@@ -540,6 +547,7 @@ size_t iconv(iconv_t cd, char **restrict
|
|
c = ksc[c][d];
|
|
if (!c) goto ilseq;
|
|
break;
|
|
+#endif
|
|
default:
|
|
if (!c) break;
|
|
c = legacy_map(map, c);
|
|
@@ -585,6 +593,7 @@ size_t iconv(iconv_t cd, char **restrict
|
|
}
|
|
}
|
|
goto subst;
|
|
+#ifdef FULL_ICONV
|
|
case SHIFT_JIS:
|
|
if (c < 128) goto revout;
|
|
if (c == 0xa5) {
|
|
@@ -658,6 +667,7 @@ size_t iconv(iconv_t cd, char **restrict
|
|
*(*out)++ = 'B';
|
|
*outb -= 8;
|
|
break;
|
|
+#endif
|
|
case UCS2:
|
|
totype = UCS2BE;
|
|
case UCS2BE:
|
|
--- a/src/locale/codepages.h
|
|
+++ b/src/locale/codepages.h
|
|
@@ -129,6 +129,7 @@
|
|
"\340\204\43\316\100\344\34\144\316\71\350\244\243\316\72\354\264\343\316\73"
|
|
"\21\361\44\317\74\364\30\145\17\124\146\345\243\317\76\374\134\304\327\77"
|
|
|
|
+#ifdef FULL_ICONV
|
|
"cp1250\0"
|
|
"windows1250\0"
|
|
"\0\40"
|
|
@@ -239,6 +240,7 @@
|
|
"\20\105\163\330\64\324\324\145\315\65\330\144\243\315\66\334\334\145\330\67"
|
|
"\340\204\43\316\100\344\224\143\316\71\350\244\243\316\72\205\265\343\316\73"
|
|
"\21\305\203\330\74\364\330\145\317\75\370\344\243\317\76\374\340\65\362\77"
|
|
+#endif
|
|
|
|
"koi8r\0"
|
|
"\0\40"
|