Fix thread-safeness in regexec()
This commit is contained in:
parent
74b9e8096b
commit
7302af99cc
@ -0,0 +1,37 @@
|
|||||||
|
From 9835bbc7fbb3423163dc49e7d822dad2b135e192 Mon Sep 17 00:00:00 2001
|
||||||
|
From: ph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>
|
||||||
|
Date: Tue, 15 Oct 2019 10:46:36 +0000
|
||||||
|
Subject: [PATCH] Ensure regexec is thread safe to avoid sanitizer warnings.
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@1176 6239d852-aaf2-0410-a92c-79f79f948069
|
||||||
|
Petr Písař: Ported to 10.33.
|
||||||
|
---
|
||||||
|
src/pcre2posix.c | 3 +--
|
||||||
|
|
||||||
|
diff --git a/src/pcre2posix.c b/src/pcre2posix.c
|
||||||
|
index 34a8d80..b24620a 100644
|
||||||
|
--- a/src/pcre2posix.c
|
||||||
|
+++ b/src/pcre2posix.c
|
||||||
|
@@ -323,6 +323,7 @@ if (preg->re_pcre2_code == NULL)
|
||||||
|
PCRE2_INFO_CAPTURECOUNT, &re_nsub);
|
||||||
|
preg->re_nsub = (size_t)re_nsub;
|
||||||
|
preg->re_match_data = pcre2_match_data_create(re_nsub + 1, NULL);
|
||||||
|
+preg->re_erroffset = (size_t)(-1); /* No meaning after successful compile */
|
||||||
|
|
||||||
|
if (preg->re_match_data == NULL)
|
||||||
|
{
|
||||||
|
@@ -356,8 +357,6 @@ if ((eflags & REG_NOTBOL) != 0) options |= PCRE2_NOTBOL;
|
||||||
|
if ((eflags & REG_NOTEOL) != 0) options |= PCRE2_NOTEOL;
|
||||||
|
if ((eflags & REG_NOTEMPTY) != 0) options |= PCRE2_NOTEMPTY;
|
||||||
|
|
||||||
|
-((regex_t *)preg)->re_erroffset = (size_t)(-1); /* Only has meaning after compile */
|
||||||
|
-
|
||||||
|
/* When REG_NOSUB was specified, or if no vector has been passed in which to
|
||||||
|
put captured strings, ensure that nmatch is zero. This will stop any attempt to
|
||||||
|
write to pmatch. */
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
70
pcre2-10.33-Fix-error-offset-bug-introduced-at-1176.patch
Normal file
70
pcre2-10.33-Fix-error-offset-bug-introduced-at-1176.patch
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
From 00acf0e2f3f01a3057fc099c60e4f530d744619b Mon Sep 17 00:00:00 2001
|
||||||
|
From: ph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>
|
||||||
|
Date: Wed, 16 Oct 2019 17:12:13 +0000
|
||||||
|
Subject: [PATCH] Fix error offset bug introduced at 1176.
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@1179 6239d852-aaf2-0410-a92c-79f79f948069
|
||||||
|
Petr Písař: Ported to 10.33.
|
||||||
|
|
||||||
|
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||||
|
---
|
||||||
|
src/pcre2_match.c | 4 ++++
|
||||||
|
testdata/testinput10 | 6 ++++++
|
||||||
|
testdata/testoutput10 | 10 ++++++++++
|
||||||
|
3 files changed, 20 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/pcre2_match.c b/src/pcre2_match.c
|
||||||
|
index 9f34e20..cca4d3a 100644
|
||||||
|
--- a/src/pcre2_match.c
|
||||||
|
+++ b/src/pcre2_match.c
|
||||||
|
@@ -6186,6 +6186,10 @@ if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0)
|
||||||
|
}
|
||||||
|
match_data->subject = NULL;
|
||||||
|
|
||||||
|
+/* Zero the error offset in case the first code unit is invalid UTF. */
|
||||||
|
+
|
||||||
|
+match_data->startchar = 0;
|
||||||
|
+
|
||||||
|
/* If the pattern was successfully studied with JIT support, run the JIT
|
||||||
|
executable instead of the rest of this function. Most options must be set at
|
||||||
|
compile time for the JIT code to be usable. Fallback to the normal code path if
|
||||||
|
diff --git a/testdata/testinput10 b/testdata/testinput10
|
||||||
|
index 4399f82..19d2f2f 100644
|
||||||
|
--- a/testdata/testinput10
|
||||||
|
+++ b/testdata/testinput10
|
||||||
|
@@ -493,4 +493,10 @@
|
||||||
|
|
||||||
|
/(?(á/utf
|
||||||
|
|
||||||
|
+/x/utf
|
||||||
|
+ abxyz
|
||||||
|
+ \x80\=startchar
|
||||||
|
+ abc\x80\=startchar
|
||||||
|
+ abc\x80\=startchar,offset=3
|
||||||
|
+
|
||||||
|
# End of testinput10
|
||||||
|
diff --git a/testdata/testoutput10 b/testdata/testoutput10
|
||||||
|
index dfecda1..dd91c45 100644
|
||||||
|
--- a/testdata/testoutput10
|
||||||
|
+++ b/testdata/testoutput10
|
||||||
|
@@ -1651,4 +1651,14 @@ Failed: error 142 at offset 4: syntax error in subpattern name (missing terminat
|
||||||
|
/(?(á/utf
|
||||||
|
Failed: error 142 at offset 5: syntax error in subpattern name (missing terminator?)
|
||||||
|
|
||||||
|
+/x/utf
|
||||||
|
+ abxyz
|
||||||
|
+ 0: x
|
||||||
|
+ \x80\=startchar
|
||||||
|
+Failed: error -22: UTF-8 error: isolated byte with 0x80 bit set at offset 0
|
||||||
|
+ abc\x80\=startchar
|
||||||
|
+Failed: error -22: UTF-8 error: isolated byte with 0x80 bit set at offset 3
|
||||||
|
+ abc\x80\=startchar,offset=3
|
||||||
|
+Error -36 (bad UTF-8 offset)
|
||||||
|
+
|
||||||
|
# End of testinput10
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
@ -100,6 +100,10 @@ Patch16: pcre2-10.33-Add-underflow-check-in-JIT.patch
|
|||||||
# Fix a use after free when freeing JIT memory, upstream bug #2453,
|
# Fix a use after free when freeing JIT memory, upstream bug #2453,
|
||||||
# in upstream after 10.33
|
# in upstream after 10.33
|
||||||
Patch17: pcre2-10.33-Fix-use-after-free-and-compilation-error-in-JIT.patch
|
Patch17: pcre2-10.33-Fix-use-after-free-and-compilation-error-in-JIT.patch
|
||||||
|
# 1/2 Fix thread-safeness in regexec(), in upstream after 10.33
|
||||||
|
Patch18: pcre2-10.33-Ensure-regexec-is-thread-safe-to-avoid-sanitizer-war.patch
|
||||||
|
# 2/2 Fix thread-safeness in regexec(), in upstream after 10.33
|
||||||
|
Patch19: pcre2-10.33-Fix-error-offset-bug-introduced-at-1176.patch
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
BuildRequires: coreutils
|
BuildRequires: coreutils
|
||||||
@ -195,6 +199,8 @@ Utilities demonstrating PCRE2 capabilities like pcre2grep or pcre2test.
|
|||||||
%patch15 -p1
|
%patch15 -p1
|
||||||
%patch16 -p1
|
%patch16 -p1
|
||||||
%patch17 -p1
|
%patch17 -p1
|
||||||
|
%patch18 -p1
|
||||||
|
%patch19 -p1
|
||||||
# Because of multilib patch
|
# Because of multilib patch
|
||||||
libtoolize --copy --force
|
libtoolize --copy --force
|
||||||
autoreconf -vif
|
autoreconf -vif
|
||||||
@ -295,6 +301,7 @@ make %{?_smp_mflags} check VERBOSE=yes
|
|||||||
%changelog
|
%changelog
|
||||||
* Tue Oct 29 2019 Petr Pisar <ppisar@redhat.com> - 10.33-15
|
* Tue Oct 29 2019 Petr Pisar <ppisar@redhat.com> - 10.33-15
|
||||||
- Fix a use after free when freeing JIT memory (upstream bug #2453)
|
- Fix a use after free when freeing JIT memory (upstream bug #2453)
|
||||||
|
- Fix thread-safeness in regexec()
|
||||||
|
|
||||||
* Mon Sep 09 2019 Petr Pisar <ppisar@redhat.com> - 10.33-14
|
* Mon Sep 09 2019 Petr Pisar <ppisar@redhat.com> - 10.33-14
|
||||||
- Fix a crash in JIT match when a subject has a zero length and an invalid
|
- Fix a crash in JIT match when a subject has a zero length and an invalid
|
||||||
|
Loading…
Reference in New Issue
Block a user