On Mon, 21 Jul 2014 at 10:17:09 +0100, Simon McVittie wrote:
> The remaining failures seem to be an intentional behaviour change in PCRE.
The attached was enough for GLib git master when I tried it yesterday.
However, I'm getting an additional test failure now, building against
my planned pcre3 NMU (which it looks as though the maintainer might
upload now):
# random seed: R02S8c9eb61b4add98149bfeeb19d0c7c029
# Start of regex tests
ok 1 /regex/properties
PASS: regex 1 /regex/properties
ok 2 /regex/class
PASS: regex 2 /regex/class
ok 3 /regex/lookahead
PASS: regex 3 /regex/lookahead
ok 4 /regex/lookbehind
PASS: regex 4 /regex/lookbehind
# ERROR:/«PKGBUILDDIR»/./glib/tests/regex.c:1693:test_subpattern: assertion
failed: (res)
ERROR: regex - missing test plan
ERROR: regex - exited with status 134 (terminated by signal 6?)
S
Index: debian/changelog
===================================================================
--- debian/changelog (revision 42085)
+++ debian/changelog (working copy)
@@ -13,6 +13,17 @@
* Use the default compiler on sparc, since it's already >> 4.7.
Closes: #751313.
+ [ Simon McVittie ]
+ * Adapt for system pcre3/1:8.35 (Closes: #755439):
+ - a PCRE 8.31 bug in case-insensitivity has been fixed, so do not assert
+ bug-for-bug compatibility with 8.31
+ - named match groups' names cannot start with a digit any more, so
+ (?P<1>.) is no longer allowed; do not assert that it is
+ - turn off a new optimization that would reduce the result set when called
+ from g_match_all(_full), to preserve existing functionality
+ * Build-depend on pcre3/1:8.35 so that the new optimization is
+ known to be turned off in the built binaries
+
-- Emilio Pozuelo Monfort <[email protected]> Mon, 05 May 2014 11:50:10 +0200
glib2.0 (2.40.0-3) unstable; urgency=medium
Index: debian/control.in
===================================================================
--- debian/control.in (revision 42085)
+++ debian/control.in (working copy)
@@ -12,7 +12,7 @@
gnome-pkg-tools (>= 0.11),
dpkg-dev (>= 1.16.0),
libelfg0-dev (>= 0.8.12),
- libpcre3-dev (>= 1:8.31),
+ libpcre3-dev (>= 1:8.35),
desktop-file-utils,
gtk-doc-tools (>= 1.20),
libselinux1-dev [linux-any],
Index: debian/patches/0001-regex-test-do-not-assert-that-system-PCRE-still-has-.patch
===================================================================
--- debian/patches/0001-regex-test-do-not-assert-that-system-PCRE-still-has-.patch (revision 0)
+++ debian/patches/0001-regex-test-do-not-assert-that-system-PCRE-still-has-.patch (working copy)
@@ -0,0 +1,36 @@
+From 8f0620d6304f5f2c386285f645b10409aa17e86e Mon Sep 17 00:00:00 2001
+From: Simon McVittie <[email protected]>
+Date: Sun, 20 Jul 2014 19:33:59 +0100
+Subject: [PATCH 1/3] regex test: do not assert that system PCRE still has an
+ 8.31 bug
+
+This was fixed in 8.32.
+
+Bug: https://bugzilla.gnome.org/show_bug.cgi?id=733325
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755439
+Forwarded: yes
+---
+ glib/tests/regex.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/glib/tests/regex.c b/glib/tests/regex.c
+index 833e585..95b2360 100644
+--- a/glib/tests/regex.c
++++ b/glib/tests/regex.c
+@@ -2446,8 +2446,12 @@ main (int argc, char *argv[])
+ /* Test that othercasing in our pcre/glib integration is bug-for-bug compatible
+ * with pcre's internal tables. Bug #678273 */
+ TEST_MATCH("[DŽ]", G_REGEX_CASELESS, 0, "DŽ", -1, 0, 0, TRUE);
+- TEST_MATCH("[DŽ]", G_REGEX_CASELESS, 0, "Dž", -1, 0, 0, FALSE);
+ TEST_MATCH("[DŽ]", G_REGEX_CASELESS, 0, "dž", -1, 0, 0, TRUE);
++#ifndef USE_SYSTEM_PCRE
++ /* This is a bug, which was fixed in 8.32. A system pcre might
++ * be that version or newer, so we cannot assert that it has this bug. */
++ TEST_MATCH("[DŽ]", G_REGEX_CASELESS, 0, "Dž", -1, 0, 0, FALSE);
++#endif
+
+ /* TEST_MATCH_NEXT#(pattern, string, string_len, start_position, ...) */
+ TEST_MATCH_NEXT0("a", "x", -1, 0);
+--
+2.0.1
+
Index: debian/patches/0002-regex-test-do-not-assert-that-system-PCRE-allows-P-1.patch
===================================================================
--- debian/patches/0002-regex-test-do-not-assert-that-system-PCRE-allows-P-1.patch (revision 0)
+++ debian/patches/0002-regex-test-do-not-assert-that-system-PCRE-allows-P-1.patch (working copy)
@@ -0,0 +1,34 @@
+From 666aeffde7809927741fdf42bab611e4e73117af Mon Sep 17 00:00:00 2001
+From: Simon McVittie <[email protected]>
+Date: Sun, 20 Jul 2014 19:34:54 +0100
+Subject: [PATCH 2/3] regex test: do not assert that system PCRE allows
+ "(?P<1>)"
+
+Perl >= 5.18, and PCRE >= 8.34, disallow this.
+
+Bug: https://bugzilla.gnome.org/show_bug.cgi?id=733325
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755439
+Forwarded: yes
+---
+ glib/tests/regex.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/glib/tests/regex.c b/glib/tests/regex.c
+index 95b2360..b317501 100644
+--- a/glib/tests/regex.c
++++ b/glib/tests/regex.c
+@@ -2632,8 +2632,11 @@ main (int argc, char *argv[])
+ TEST_EXPAND("a", "a", "\\0130", FALSE, "X");
+ TEST_EXPAND("a", "a", "\\\\\\0", FALSE, "\\a");
+ TEST_EXPAND("a(?P<G>.)c", "xabcy", "X\\g<G>X", FALSE, "XbX");
++#ifndef USE_SYSTEM_PCRE
++ /* PCRE >= 8.34 no longer allows this usage. */
+ TEST_EXPAND("(.)(?P<1>.)", "ab", "\\1", FALSE, "a");
+ TEST_EXPAND("(.)(?P<1>.)", "ab", "\\g<1>", FALSE, "a");
++#endif
+ TEST_EXPAND(".", EURO, "\\0", FALSE, EURO);
+ TEST_EXPAND("(.)", EURO, "\\1", FALSE, EURO);
+ TEST_EXPAND("(?P<G>.)", EURO, "\\g<G>", FALSE, EURO);
+--
+2.0.1
+
Index: debian/patches/0003-regex-if-PCRE-is-8.34-or-later-go-back-to-older-DFA-.patch
===================================================================
--- debian/patches/0003-regex-if-PCRE-is-8.34-or-later-go-back-to-older-DFA-.patch (revision 0)
+++ debian/patches/0003-regex-if-PCRE-is-8.34-or-later-go-back-to-older-DFA-.patch (working copy)
@@ -0,0 +1,37 @@
+From 21d9f6db5613da81f4192672100a2b1446aaabd2 Mon Sep 17 00:00:00 2001
+From: Simon McVittie <[email protected]>
+Date: Mon, 21 Jul 2014 10:03:33 +0100
+Subject: [PATCH 3/3] regex: if PCRE is 8.34 or later, go back to older
+ DFA-matching behaviour
+
+This currently only affects a system PCRE, but would also work fine for
+an internal PCRE 8.34 or later if the embedded copy is updated.
+
+Bug: https://bugzilla.gnome.org/show_bug.cgi?id=733325
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755439
+Forwarded: yes
+---
+ glib/gregex.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/glib/gregex.c b/glib/gregex.c
+index 41bf67e..e693a7a 100644
+--- a/glib/gregex.c
++++ b/glib/gregex.c
+@@ -1883,6 +1883,13 @@ g_regex_match_all_full (const GRegex *regex,
+ info = match_info_new (regex, string, string_len, start_position,
+ match_options, TRUE);
+
++#ifdef PCRE_NO_AUTO_POSSESS
++ /* PCRE 8.34 introduced an optimization which changes the behaviour
++ * of DFA matching. Alter the match options passed to PCRE (but not
++ * those in the match info) to go back to how it used to work. */
++ match_options |= PCRE_NO_AUTO_POSSESS;
++#endif
++
+ done = FALSE;
+ while (!done)
+ {
+--
+2.0.1
+
Index: debian/patches/series
===================================================================
--- debian/patches/series (revision 42085)
+++ debian/patches/series (working copy)
@@ -18,3 +18,6 @@
81-skip-monitor-test-on-non-linux.patch
0001-timer-test-use-volatile-for-locals.patch
skip-broken-timer-test.patch
+0001-regex-test-do-not-assert-that-system-PCRE-still-has-.patch
+0002-regex-test-do-not-assert-that-system-PCRE-allows-P-1.patch
+0003-regex-if-PCRE-is-8.34-or-later-go-back-to-older-DFA-.patch