diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2025-05-31 18:34:17 -0500 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2025-07-13 00:14:04 -0500 |
commit | da72afef736bcf617759ace3afa0bf35ed2aa7c4 (patch) | |
tree | 34c19c25ec85740b2ec2c59bd4afa3c9abdd7a94 | |
parent | 5b9dd6591bffe4f375e65641149479441a5dae12 (diff) | |
download | packages-da72afef736bcf617759ace3afa0bf35ed2aa7c4.tar.gz packages-da72afef736bcf617759ace3afa0bf35ed2aa7c4.tar.bz2 packages-da72afef736bcf617759ace3afa0bf35ed2aa7c4.tar.xz packages-da72afef736bcf617759ace3afa0bf35ed2aa7c4.zip |
system/libarchive: [CVE] Update to 3.8.0
Many improvements, major compatibility improvements with GNU tar.
We now use PCRE2 for regex instead of libc for wider support of ERE.
-rw-r--r-- | system/libarchive/APKBUILD | 15 | ||||
-rw-r--r-- | system/libarchive/disable-locale-tests.patch | 125 | ||||
-rw-r--r-- | system/libarchive/fix-test-32-bit-zstd.patch | 29 | ||||
-rw-r--r-- | system/libarchive/test-fix.patch | 13 |
4 files changed, 89 insertions, 93 deletions
diff --git a/system/libarchive/APKBUILD b/system/libarchive/APKBUILD index 9fcca3319..4c63983d6 100644 --- a/system/libarchive/APKBUILD +++ b/system/libarchive/APKBUILD @@ -1,20 +1,20 @@ # Contributor: Sergey Lukin <sergej.lukin@gmail.com> # Maintainer: A. Wilcox <awilfox@adelielinux.org> pkgname=libarchive -pkgver=3.7.2 +pkgver=3.8.0 pkgrel=0 pkgdesc="Multi-format archive and compression library" url="https://www.libarchive.org/" arch="all" license="BSD-2-Clause AND BSD-3-Clause AND Public-Domain" depends="" -makedepends="zlib-dev bzip2-dev xz-dev lz4-dev acl-dev openssl-dev expat-dev - attr-dev zstd-dev" +makedepends="acl-dev attr-dev bzip2-dev expat-dev lz4-dev openssl-dev pcre2-dev + xz-dev zlib-dev zstd-dev" subpackages="$pkgname-dev $pkgname-doc $pkgname-tools" source="https://github.com/libarchive/libarchive/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz disable-locale-tests.patch disable-unaligned-access-arm32-xxhash.patch - fix-test-32-bit-zstd.patch + test-fix.patch " # secfixes: @@ -40,6 +40,7 @@ build () { --with-lz4 \ --enable-acl \ --enable-xattr \ + --enable-posix-regex-lib=libpcre2posix \ ac_cv_header_linux_fiemap_h=no make } @@ -61,7 +62,7 @@ tools() { ln -s bsdcpio "$subpkgdir"/usr/bin/cpio } -sha512sums="1af253203df3014d1fbf3e99ebdc7aa2a3f036c7c2606d0f0550c49973b0fff99ee7262f4a6e20090c0806c40e964731334360daa3b718bde40108183eacc8a1 libarchive-3.7.2.tar.gz -27cf2aaa3e70e3a2a9944fac0c96c411e669c7e1a48daad1423bff68eef0f49153e5ef9d22dc9591a65353119d7fe203a28258ab82278aeb86b46fe691bcfb6a disable-locale-tests.patch +sha512sums="e563cd10cd447daf7c5d11c657cbc3d8971add4440264fb4754ea7670a249e8b7b1c31f62f78259867960392623dba73c2d20efc57dc02564c8f55841dc8f2cc libarchive-3.8.0.tar.gz +0360eb38364af93ebe81fc59e6a2b1bdb9c1d42487560c3565c5723a57f8f5ee85638ad6906f761d9b41f7d6ad03bad800810394ea1bfcfc70e6c07b25bcfad6 disable-locale-tests.patch 56a2b13b6cd7b127c04ac50ebf49994ec91ff2467d5d0f32b8428bd4df82b167459d4630dee5d1b5119f70b04ea6fe4411d44b768e0f313fa302c9e5fe51b7cd disable-unaligned-access-arm32-xxhash.patch -f0a8e3881e742395afc74e418eceab419280152f0884fd6b9dc971d90e117de1cd0a7578c08f14f694c75b904f12fa71fb0102dde0d67a095f6369b3413f7348 fix-test-32-bit-zstd.patch" +1eee8588058ce1de122d20de1ac67f8294be5b8d1ea28dc7adf28cee86eb45e697983a051f25a38d2e0ca92b9996e1d13707b985b86ff1647c8960ffca965fea test-fix.patch" diff --git a/system/libarchive/disable-locale-tests.patch b/system/libarchive/disable-locale-tests.patch index 885490c95..0775e8cc9 100644 --- a/system/libarchive/disable-locale-tests.patch +++ b/system/libarchive/disable-locale-tests.patch @@ -1,6 +1,6 @@ --- libarchive-3.6.0/libarchive/test/test_gnutar_filename_encoding.c.old 2022-02-09 06:24:12.000000000 -0600 +++ libarchive-3.6.0/libarchive/test/test_gnutar_filename_encoding.c 2022-02-20 17:08:38.820000000 -0600 -@@ -75,7 +75,7 @@ +@@ -73,7 +73,7 @@ char buff[4096]; size_t used; @@ -9,7 +9,7 @@ skipping("KOI8-R locale not available on this system."); return; } -@@ -116,7 +116,7 @@ +@@ -114,7 +114,7 @@ char buff[4096]; size_t used; @@ -18,7 +18,7 @@ skipping("KOI8-R locale not available on this system."); return; } -@@ -157,8 +157,7 @@ +@@ -155,8 +155,7 @@ char buff[4096]; size_t used; @@ -28,7 +28,7 @@ skipping("KOI8-R locale not available on this system."); return; } -@@ -242,7 +241,7 @@ +@@ -240,7 +239,7 @@ char buff[4096]; size_t used; @@ -37,7 +37,7 @@ skipping("Russian_Russia locale not available on this system."); return; } -@@ -277,7 +276,7 @@ +@@ -275,7 +274,7 @@ char buff[4096]; size_t used; @@ -46,7 +46,7 @@ skipping("eucJP locale not available on this system."); return; } -@@ -357,8 +356,7 @@ +@@ -355,8 +354,7 @@ char buff[4096]; size_t used; @@ -58,7 +58,7 @@ } --- libarchive-3.6.0/libarchive/test/test_pax_filename_encoding.c.old 2022-02-09 06:24:12.000000000 -0600 +++ libarchive-3.6.0/libarchive/test/test_pax_filename_encoding.c 2022-02-20 17:09:41.050000000 -0600 -@@ -342,7 +342,7 @@ +@@ -341,7 +341,7 @@ char buff[4096]; size_t used; @@ -67,7 +67,7 @@ skipping("KOI8-R locale not available on this system."); return; } -@@ -388,8 +388,7 @@ +@@ -387,8 +387,7 @@ char buff[4096]; size_t used; @@ -77,7 +77,7 @@ skipping("KOI8-R locale not available on this system."); return; } -@@ -435,7 +434,7 @@ +@@ -434,7 +433,7 @@ char buff[4096]; size_t used; @@ -86,7 +86,7 @@ skipping("eucJP locale not available on this system."); return; } -@@ -482,8 +481,7 @@ +@@ -481,8 +480,7 @@ char buff[4096]; size_t used; @@ -98,7 +98,7 @@ } --- libarchive-3.6.0/libarchive/test/test_read_format_cpio_filename.c.old 2022-02-09 06:24:12.000000000 -0600 +++ libarchive-3.6.0/libarchive/test/test_read_format_cpio_filename.c 2022-02-20 17:16:18.580000000 -0600 -@@ -91,7 +91,7 @@ +@@ -90,7 +90,7 @@ /* * Read UTF-8 filename in ja_JP.eucJP with "hdrcharset=UTF-8" option. */ @@ -107,7 +107,7 @@ skipping("ja_JP.eucJP locale not available on this system."); return; } -@@ -191,8 +191,7 @@ +@@ -196,8 +196,7 @@ /* * Read CP866 filename in ru_RU.KOI8-R with "hdrcharset=CP866" option. */ @@ -117,7 +117,7 @@ skipping("ru_RU.KOI8-R locale not available on this system."); return; } -@@ -296,8 +295,7 @@ +@@ -301,8 +300,7 @@ /* * Read KOI8-R filename in ru_RU.CP866 with "hdrcharset=KOI8-R" option. */ @@ -127,7 +127,7 @@ skipping("ru_RU.CP866 locale not available on this system."); return; } -@@ -401,8 +399,7 @@ +@@ -406,8 +404,7 @@ /* * Read UTF-8 filename in ru_RU.KOI8-R with "hdrcharset=UTF-8" option. */ @@ -137,7 +137,7 @@ skipping("ru_RU.KOI8-R locale not available on this system."); return; } -@@ -454,8 +451,7 @@ +@@ -459,8 +456,7 @@ /* * Read UTF-8 filename in ru_RU.CP866 with "hdrcharset=UTF-8" option. */ @@ -147,7 +147,7 @@ skipping("ru_RU.CP866 locale not available on this system."); return; } -@@ -553,8 +549,7 @@ +@@ -564,8 +560,7 @@ /* * Read eucJP filename in CP932/SJIS with "hdrcharset=eucJP" option. */ @@ -157,7 +157,7 @@ skipping("CP932 locale not available on this system."); return; } -@@ -604,8 +599,7 @@ +@@ -615,8 +600,7 @@ /* * Read UTF-8 filename in CP932/SJIS with "hdrcharset=UTF-8" option. */ @@ -167,7 +167,7 @@ skipping("CP932 locale not available on this system."); return; } -@@ -656,8 +650,7 @@ +@@ -667,8 +661,7 @@ /* * Read CP866 filename in CP1251 with "hdrcharset=CP866" option. */ @@ -177,7 +177,7 @@ skipping("CP1251 locale not available on this system."); return; } -@@ -715,7 +708,7 @@ +@@ -726,7 +719,7 @@ /* * Read CP866 filename in CP1251 without "hdrcharset=CP866" option. */ @@ -186,7 +186,7 @@ skipping("Russian_Russia locale not available on this system."); return; } -@@ -761,8 +754,7 @@ +@@ -772,8 +765,7 @@ /* * Read KOI8-R filename in CP1251 with "hdrcharset=KOI8-R" option. */ @@ -196,7 +196,7 @@ skipping("CP1251 locale not available on this system."); return; } -@@ -814,8 +806,7 @@ +@@ -825,8 +817,7 @@ /* * Read KOI8-R filename in CP1251 with "hdrcharset=KOI8-R" option. */ @@ -208,7 +208,7 @@ } --- libarchive-3.6.0/libarchive/test/test_read_format_gtar_filename.c.old 2022-02-09 06:24:12.000000000 -0600 +++ libarchive-3.6.0/libarchive/test/test_read_format_gtar_filename.c 2022-02-20 17:17:56.960000000 -0600 -@@ -89,8 +89,7 @@ +@@ -88,8 +88,7 @@ /* * Read CP866 filename in ru_RU.KOI8-R with "hdrcharset=CP866" option. */ @@ -218,7 +218,7 @@ skipping("ru_RU.KOI8-R locale not available on this system."); return; } -@@ -194,8 +193,7 @@ +@@ -193,8 +192,7 @@ /* * Read KOI8-R filename in ru_RU.CP866 with "hdrcharset=KOI8-R" option. */ @@ -228,7 +228,7 @@ skipping("ru_RU.CP866 locale not available on this system."); return; } -@@ -299,8 +297,7 @@ +@@ -298,8 +296,7 @@ /* * Read eucJP filename in CP932/SJIS with "hdrcharset=eucJP" option. */ @@ -238,7 +238,7 @@ skipping("CP932 locale not available on this system."); return; } -@@ -350,8 +347,7 @@ +@@ -349,8 +346,7 @@ /* * Read CP866 filename in CP1251 with "hdrcharset=CP866" option. */ @@ -248,7 +248,7 @@ skipping("CP1251 locale not available on this system."); return; } -@@ -409,7 +405,7 @@ +@@ -408,7 +404,7 @@ /* * Read CP866 filename in CP1251 without "hdrcharset=CP866" option. */ @@ -257,7 +257,7 @@ skipping("Russian_Russia locale not available on this system."); return; } -@@ -455,8 +451,7 @@ +@@ -454,8 +450,7 @@ /* * Read KOI8-R filename in CP1251 with "hdrcharset=KOI8-R" option. */ @@ -269,7 +269,7 @@ } --- libarchive-3.6.0/libarchive/test/test_read_format_rar.c.old 2022-02-09 06:24:12.000000000 -0600 +++ libarchive-3.6.0/libarchive/test/test_read_format_rar.c 2022-02-20 17:19:17.710000000 -0600 -@@ -336,8 +336,7 @@ +@@ -344,8 +344,7 @@ struct archive_entry *ae; struct archive *a; @@ -281,7 +281,7 @@ } --- libarchive-3.6.0/libarchive/test/test_read_format_zip_filename.c.old 2022-02-09 06:24:12.000000000 -0600 +++ libarchive-3.6.0/libarchive/test/test_read_format_zip_filename.c 2022-02-20 17:29:22.640000000 -0600 -@@ -176,7 +176,7 @@ +@@ -175,7 +175,7 @@ * because the file name in the sample file is UTF-8 and * Bit 11 of its general purpose bit flag is set. */ @@ -290,7 +290,7 @@ skipping("ja_JP.eucJP locale not availablefilename_ on " "this system."); return; -@@ -343,8 +343,7 @@ +@@ -342,8 +342,7 @@ /* * Read CP866 filename in ru_RU.KOI8-R with "hdrcharset=CP866" option. */ @@ -300,7 +300,7 @@ skipping("ru_RU.KOI8-R locale not available on this system."); return; } -@@ -456,8 +455,7 @@ +@@ -455,8 +454,7 @@ /* * Read KOI8-R filename in ru_RU.CP866 with "hdrcharset=KOI8-R" option. */ @@ -310,7 +310,7 @@ skipping("ru_RU.CP866 locale not available on this system."); return; } -@@ -569,8 +567,7 @@ +@@ -568,8 +566,7 @@ /* * Read UTF-8 filename in ru_RU.KOI8-R with "hdrcharset=UTF-8" option. */ @@ -320,7 +320,7 @@ skipping("ru_RU.KOI8-R locale not available on this system."); return; } -@@ -633,8 +630,7 @@ +@@ -632,8 +629,7 @@ * because the file name in the sample file is UTF-8 and * Bit 11 of its general purpose bit flag is set. */ @@ -330,7 +330,7 @@ skipping("ru_RU.CP866 locale not available on this system."); return; } -@@ -809,8 +805,7 @@ +@@ -808,8 +804,7 @@ * because the file name in the sample file is UTF-8 and * Bit 11 of its general purpose bit flag is set. */ @@ -340,7 +340,7 @@ skipping("CP932 locale not available on this system."); return; } -@@ -884,8 +879,7 @@ +@@ -883,8 +878,7 @@ /* * Read CP866 filename in CP1251 with "hdrcharset=CP866" option. */ @@ -350,7 +350,7 @@ skipping("CP1251 locale not available on this system."); return; } -@@ -947,7 +941,7 @@ +@@ -946,7 +940,7 @@ /* * Read CP866 filename in CP1251 without "hdrcharset=CP866" option. */ @@ -359,7 +359,7 @@ skipping("Russian_Russia locale not available on this system."); return; } -@@ -997,8 +991,7 @@ +@@ -996,8 +990,7 @@ /* * Read KOI8-R filename in CP1251 with "hdrcharset=KOI8-R" option. */ @@ -369,7 +369,7 @@ skipping("CP1251 locale not available on this system."); return; } -@@ -1056,8 +1049,7 @@ +@@ -1055,8 +1048,7 @@ * because the file name in the sample file is UTF-8 and * Bit 11 of its general purpose bit flag is set. */ @@ -381,7 +381,7 @@ } --- libarchive-3.6.0/libarchive/test/test_ustar_filename_encoding.c.old 2022-02-09 06:24:12.000000000 -0600 +++ libarchive-3.6.0/libarchive/test/test_ustar_filename_encoding.c 2022-02-20 17:30:54.440000000 -0600 -@@ -75,7 +75,7 @@ +@@ -74,7 +74,7 @@ char buff[4096]; size_t used; @@ -390,7 +390,7 @@ skipping("KOI8-R locale not available on this system."); return; } -@@ -116,7 +116,7 @@ +@@ -115,7 +115,7 @@ char buff[4096]; size_t used; @@ -399,7 +399,7 @@ skipping("KOI8-R locale not available on this system."); return; } -@@ -157,8 +157,7 @@ +@@ -156,8 +156,7 @@ char buff[4096]; size_t used; @@ -409,7 +409,7 @@ skipping("KOI8-R locale not available on this system."); return; } -@@ -242,7 +241,7 @@ +@@ -241,7 +240,7 @@ char buff[4096]; size_t used; @@ -418,7 +418,7 @@ skipping("Russian_Russia locale not available on this system."); return; } -@@ -277,7 +276,7 @@ +@@ -276,7 +275,7 @@ char buff[4096]; size_t used; @@ -427,7 +427,7 @@ skipping("eucJP locale not available on this system."); return; } -@@ -357,8 +356,7 @@ +@@ -356,8 +355,7 @@ char buff[4096]; size_t used; @@ -439,7 +439,7 @@ } --- libarchive-3.6.0/libarchive/test/test_zip_filename_encoding.c.old 2022-02-09 06:24:12.000000000 -0600 +++ libarchive-3.6.0/libarchive/test/test_zip_filename_encoding.c 2022-02-20 17:41:15.060000000 -0600 -@@ -122,7 +122,7 @@ +@@ -124,7 +124,7 @@ char buff[4096]; size_t used; @@ -448,7 +448,7 @@ skipping("KOI8-R locale not available on this system."); return; } -@@ -222,7 +222,7 @@ +@@ -224,7 +224,7 @@ char buff[4096]; size_t used; @@ -457,7 +457,7 @@ skipping("Russian_Russia locale not available on this system."); return; } -@@ -265,7 +265,7 @@ +@@ -267,7 +267,7 @@ char buff[4096]; size_t used; @@ -466,7 +466,7 @@ skipping("Russian_Russia locale not available on this system."); return; } -@@ -334,7 +334,7 @@ +@@ -336,7 +336,7 @@ char buff[4096]; size_t used; @@ -475,7 +475,7 @@ skipping("eucJP locale not available on this system."); return; } -@@ -433,8 +433,7 @@ +@@ -435,8 +435,7 @@ char buff[4096]; size_t used; @@ -487,7 +487,7 @@ } --- libarchive-3.6.0/libarchive/test/test_read_format_tar_filename.c.old 2022-02-09 06:24:12.000000000 -0600 +++ libarchive-3.6.0/libarchive/test/test_read_format_tar_filename.c 2022-02-20 17:54:34.540000000 -0600 -@@ -47,8 +47,7 @@ +@@ -46,8 +46,7 @@ * Read filename in ru_RU.CP866 with "hdrcharset=KOI8-R" option. * We should correctly read two filenames. */ @@ -497,7 +497,7 @@ skipping("ru_RU.CP866 locale not available on this system."); return; } -@@ -276,8 +275,7 @@ +@@ -275,8 +274,7 @@ * Read filename in CP1251 with "hdrcharset=KOI8-R" option. * We should correctly read two filenames. */ @@ -509,7 +509,7 @@ } --- libarchive-3.6.0/libarchive/test/test_read_format_ustar_filename.c.old 2022-02-09 06:24:12.000000000 -0600 +++ libarchive-3.6.0/libarchive/test/test_read_format_ustar_filename.c 2022-02-20 17:56:02.310000000 -0600 -@@ -90,8 +90,7 @@ +@@ -89,8 +89,7 @@ /* * Read CP866 filename in ru_RU.KOI8-R with "hdrcharset=CP866" option. */ @@ -519,7 +519,7 @@ skipping("ru_RU.KOI8-R locale not available on this system."); return; } -@@ -200,8 +199,7 @@ +@@ -199,8 +198,7 @@ /* * Read KOI8-R filename in ru_RU.CP866 with "hdrcharset=KOI8-R" option. */ @@ -529,7 +529,7 @@ skipping("ru_RU.CP866 locale not available on this system."); return; } -@@ -311,8 +309,7 @@ +@@ -310,8 +308,7 @@ /* * Read eucJP filename in CP932/SJIS with "hdrcharset=eucJP" option. */ @@ -539,7 +539,7 @@ skipping("CP932 locale not available on this system."); return; } -@@ -365,8 +362,7 @@ +@@ -364,8 +361,7 @@ /* * Read CP866 filename in CP1251 with "hdrcharset=CP866" option. */ @@ -549,7 +549,7 @@ skipping("CP1251 locale not available on this system."); return; } -@@ -427,7 +423,7 @@ +@@ -426,7 +422,7 @@ /* * Read CP866 filename in CP1251 without "hdrcharset=CP866" option. */ @@ -558,7 +558,7 @@ skipping("Russian_Russia locale not available on this system."); return; } -@@ -476,8 +472,7 @@ +@@ -475,8 +471,7 @@ /* * Read KOI8-R filename in CP1251 with "hdrcharset=KOI8-R" option. */ @@ -568,3 +568,14 @@ skipping("CP1251 locale not available on this system."); return; } +--- libarchive-3.8.0/libarchive/test/test_archive_string_conversion.c.old 2025-05-20 04:00:39.000000000 -0500 ++++ libarchive-3.8.0/libarchive/test/test_archive_string_conversion.c 2025-05-31 18:27:37.470770608 -0500 +@@ -995,7 +995,7 @@ + + memset(&mstr, 0, sizeof(mstr)); + +- if (setlocale(LC_ALL, "ru_RU.KOI8-R") == NULL) { ++ if (1) { + skipping("KOI8-R locale not available on this system."); + return; + } diff --git a/system/libarchive/fix-test-32-bit-zstd.patch b/system/libarchive/fix-test-32-bit-zstd.patch deleted file mode 100644 index 5f43c2626..000000000 --- a/system/libarchive/fix-test-32-bit-zstd.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 3bd918d92f8c34ba12de9c6604d96f9e262a59fc Mon Sep 17 00:00:00 2001 -From: Martin Matuska <martin@matuska.de> -Date: Tue, 12 Sep 2023 08:54:47 +0200 -Subject: [PATCH] tests: fix zstd long option test for 32-bit architectures - -Fixes #1968 ---- - libarchive/test/test_write_filter_zstd.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/libarchive/test/test_write_filter_zstd.c b/libarchive/test/test_write_filter_zstd.c -index 3cdbd812a..c9731f1b6 100644 ---- a/libarchive/test/test_write_filter_zstd.c -+++ b/libarchive/test/test_write_filter_zstd.c -@@ -161,8 +161,12 @@ DEFINE_TEST(test_write_filter_zstd) - archive_write_set_filter_option(a, NULL, "max-frame-size", "1048576")); - #endif - #if ZSTD_VERSION_NUMBER >= MINVER_LONG -- assertEqualIntA(a, ARCHIVE_OK, -- archive_write_set_filter_option(a, NULL, "long", "27")); -+ if ((int)(sizeof(size_t) == 4)) -+ assertEqualIntA(a, ARCHIVE_OK, -+ archive_write_set_filter_option(a, NULL, "long", "26")); -+ else -+ assertEqualIntA(a, ARCHIVE_OK, -+ archive_write_set_filter_option(a, NULL, "long", "27")); - assertEqualIntA(a, ARCHIVE_FAILED, - archive_write_set_filter_option(a, NULL, "long", "-1")); /* negative */ - #endif diff --git a/system/libarchive/test-fix.patch b/system/libarchive/test-fix.patch new file mode 100644 index 000000000..484145dd3 --- /dev/null +++ b/system/libarchive/test-fix.patch @@ -0,0 +1,13 @@ +Upstream-URL: https://github.com/libarchive/libarchive/issues/2653 + +--- libarchive-3.8.0/test_utils/test_main.c.old 2025-05-20 04:00:39.000000000 -0500 ++++ libarchive-3.8.0/test_utils/test_main.c 2025-05-31 17:39:16.638713788 -0500 +@@ -2456,7 +2456,7 @@ + + /* Skip arbitrary third-party version numbers. */ + while (s > 0 && (*q == ' ' || *q == '-' || *q == '/' || *q == '.' || +- isalnum((unsigned char)*q))) { ++ *q == '_' || isalnum((unsigned char)*q))) { + ++q; + --s; + } |