commit: 0990ed573b83eb13c857be82a0cf2058463e9271 Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Fri Oct 31 07:48:43 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Fri Oct 31 07:56:46 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0990ed57
dev-libs/libpcre2: backport fix for riscv tests It's a test-only fix so no revbump. Bug: https://bugs.gentoo.org/964425 Signed-off-by: Sam James <sam <AT> gentoo.org> dev-libs/libpcre2/files/libpcre2-10.47-riscv.patch | 118 +++++++++++++++++++++ dev-libs/libpcre2/libpcre2-10.47.ebuild | 1 + 2 files changed, 119 insertions(+) diff --git a/dev-libs/libpcre2/files/libpcre2-10.47-riscv.patch b/dev-libs/libpcre2/files/libpcre2-10.47-riscv.patch new file mode 100644 index 000000000000..a95be85df7b0 --- /dev/null +++ b/dev-libs/libpcre2/files/libpcre2-10.47-riscv.patch @@ -0,0 +1,118 @@ +https://bugs.gentoo.org/964425 +https://github.com/PCRE2Project/pcre2/issues/831 +https://github.com/PCRE2Project/pcre2/pull/835 (doc change snipped) + +From 6454fac3920d9223a2b05becf15e3cb8e6022243 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <[email protected]> +Date: Thu, 30 Oct 2025 13:57:32 -0700 +Subject: [PATCH] pcre2test: dynamically allocate buffer for JITTARGET (#835) + +Always ask `pcre2_config()` for the expected size of buffers and abort if +it is too small. + +In the documentation, remove the description of a static buffer size for +JITTARGET. +--- + src/pcre2test.c | 12 ++++++------ + src/pcre2test_inc.h | 35 ++++++++++++++++++++++++++--------- + 3 files changed, 43 insertions(+), 25 deletions(-) + +--- a/src/pcre2test.c ++++ b/src/pcre2test.c +@@ -2942,9 +2942,9 @@ static int pcre2_config(uint32_t what, void *where) + DISPATCH(return, pcre2_config_, (what, where)); + } + +-static void config_str(uint32_t what, char *where) ++static char *config_str(uint32_t what, char *where, int size) + { +-DISPATCH(, config_str_, (what, where)); ++DISPATCH(return, config_str_, (what, where, size)); + } + + static BOOL decode_modifiers(uint8_t *p, int ctx, patctl *pctl, datctl *dctl) +@@ -3014,7 +3014,7 @@ static void + print_version(FILE *f, BOOL include_mode) + { + char buf[VERSION_SIZE]; +-config_str(PCRE2_CONFIG_VERSION, buf); ++config_str(PCRE2_CONFIG_VERSION, buf, sizeof(buf)); + fprintf(f, "PCRE2 version %s", buf); + if (include_mode) + { +@@ -3033,7 +3033,7 @@ static void + print_unicode_version(FILE *f) + { + char buf[VERSION_SIZE]; +-config_str(PCRE2_CONFIG_UNICODE_VERSION, buf); ++config_str(PCRE2_CONFIG_UNICODE_VERSION, buf, sizeof(buf)); + fprintf(f, "Unicode version %s", buf); + } + +@@ -3046,9 +3046,9 @@ fprintf(f, "Unicode version %s", buf); + static void + print_jit_target(FILE *f) + { +-char buf[VERSION_SIZE]; +-config_str(PCRE2_CONFIG_JITTARGET, buf); ++char *buf = config_str(PCRE2_CONFIG_JITTARGET, NULL, 0); + fputs(buf, f); ++free(buf); + } + + +diff --git a/src/pcre2test_inc.h b/src/pcre2test_inc.h +index c47074171..ce808a82f 100644 +--- a/src/pcre2test_inc.h ++++ b/src/pcre2test_inc.h +@@ -558,24 +558,41 @@ return 0; + + Arguments: + what the item to read +- where the 8-bit buffer to receive the string ++ where the 8-bit buffer to receive the string (NULLABLE) ++ size sizeof(where) or 0 to ask for the buffer to be allocated ++ ++Returns: the string where the data was written + */ + +-static void +-config_str(uint32_t what, char *where) ++static char * ++config_str(uint32_t what, char *where, int size) + { +-int r1, r2; +-PCRE2_UCHAR buf[VERSION_SIZE]; ++int r2; ++PCRE2_UCHAR *buf; ++int needed_len; + +-r1 = pcre2_config(what, NULL); +-r2 = pcre2_config(what, buf); +-if (r1 < 0 || r1 != r2 || r1 >= VERSION_SIZE) ++needed_len = pcre2_config(what, NULL); ++if (needed_len <= 0) + { + cfprintf(clr_test_error, stderr, "pcre2test: Error in pcre2_config(%d)\n", what); + exit(1); + } ++else if (size != 0 && needed_len > size) ++ { ++ cfprintf(clr_test_error, stderr, ++ "pcre2test: Static buffer provided to pcre2_config(%d) too small\n", what); ++ exit(1); ++ } ++ ++buf = malloc(needed_len * sizeof(PCRE2_UCHAR)); ++r2 = pcre2_config(what, buf); ++PCRE2_ASSERT(r2 == needed_len); ++ ++if (where == NULL) where = malloc(needed_len); ++while (r2-- > 0) where[r2] = (char)buf[r2]; ++free(buf); + +-while (r1-- > 0) where[r1] = (char)buf[r1]; ++return where; + } + + diff --git a/dev-libs/libpcre2/libpcre2-10.47.ebuild b/dev-libs/libpcre2/libpcre2-10.47.ebuild index a0db9d66b434..6d4c5622859f 100644 --- a/dev-libs/libpcre2/libpcre2-10.47.ebuild +++ b/dev-libs/libpcre2/libpcre2-10.47.ebuild @@ -48,6 +48,7 @@ MULTILIB_CHOST_TOOLS=( PATCHES=( "${FILESDIR}"/${PN}-10.10-000-Fix-multilib.patch + "${FILESDIR}"/${PN}-10.47-riscv.patch ) src_prepare() {
