Control: tags -1 + patch On Thu, Jun 29, 2023 at 09:39:18PM +0100, Luca Boccassi wrote: > If someone provides a patch, that is tested against such workflows > to confirm that they are not affected, then I'd merged it, upstream.
Please find attached a patch. I could not test it, though, as I do not understand what these workflows are and I couldn't figure out how to write a testcase after my (admittedly short) glimpse at the documentation.
Description: Port to PCRE2 Bug-Debian: https://bugs.debian.org/1000118 Author: Yavor Doganov <ya...@gnu.org> Forwarded: no Last-Update: 2023-12-06 --- --- generator-scripting-language-4.1.5.orig/src/ggpcre.c +++ generator-scripting-language-4.1.5/src/ggpcre.c @@ -51,7 +51,8 @@ regexp_functions, tblsize (regexp_functions) }; -#include <pcre.h> +#define PCRE2_CODE_UNIT_WIDTH 8 +#include <pcre2.h> static int @@ -86,13 +87,17 @@ { GGCODE_TCB *tcb = gsl_thread-> tcb; - pcre + pcre2_code *re; + pcre2_match_data + *md; char *error; - int + int + errcode; + size_t erroffset; - int + size_t *ovector; int oveccount, @@ -103,47 +108,50 @@ VALUE value; - re = pcre_compile (string_value (&pattern-> value), - 0, - (const char **) &error, - &erroffset, - NULL); + re = pcre2_compile ((PCRE2_SPTR) string_value (&pattern-> value), + PCRE2_ZERO_TERMINATED, + 0, + &errcode, + &erroffset, + NULL); if (! re) { + PCRE2_UCHAR buf[120]; + + pcre2_get_error_message (errcode, buf, sizeof(buf)); snprintf (object_error, LINE_MAX, "Regular expression pattern error: %s\n%s\n%*c", - error, + buf, pattern-> value. s, - erroffset + 1, '^'); + (int) erroffset + 1, '^'); return -1; } - rc = pcre_fullinfo (re, - NULL, - PCRE_INFO_CAPTURECOUNT, - &oveccount); + rc = pcre2_pattern_info (re, + PCRE2_INFO_CAPTURECOUNT, + &oveccount); oveccount = (oveccount + 1) * 3; - ovector = mem_alloc (oveccount * sizeof (int)); + md = pcre2_match_data_create (oveccount, NULL); string_value (&subject-> value); - rc = pcre_exec (re, - NULL, - subject-> value. s, - (int) strlen (subject-> value. s), - 0, - 0, - ovector, - oveccount); + rc = pcre2_match (re, + (PCRE2_SPTR) subject-> value. s, + strlen (subject-> value. s), + 0, + 0, + md, + NULL); - (pcre_free) (re); + (pcre2_code_free) (re); + ovector = pcre2_get_ovector_pointer (md); - if (rc == PCRE_ERROR_NOMATCH) + if (rc == PCRE2_ERROR_NOMATCH) rc = 0; else if (rc < 0) { snprintf (object_error, LINE_MAX, "Regular expression matching error: %d", rc); - mem_free (ovector); + pcre2_match_data_free (md); return -1; } else if (rc == 1) @@ -179,7 +187,7 @@ { strncpy (object_error, error, LINE_MAX); mem_free (value.s); - mem_free (ovector); + pcre2_match_data_free (md); return -1; } destroy_value (& value); @@ -187,7 +195,7 @@ i++; } - mem_free (ovector); + pcre2_match_data_free (md); } return 0; /* Just in case */ --- generator-scripting-language-4.1.5.orig/src/Makefile +++ generator-scripting-language-4.1.5/src/Makefile @@ -51,9 +51,7 @@ EXE = DBG = CC = ./c -q -export CCLIBS = -lpcre - -CPPFLAGS ?= -I/usr/include/pcre +export CCLIBS = -lpcre2-8 # Reset the suffixes that will be considered to just our own list. #