From: Fabian Keil <fk@fabiankeil.de>
Date: Sat, 16 Jan 2016 12:28:43 +0000 (+0000)
Subject: pcre: Fix invalid reads in internal and outdated pcre code
X-Git-Tag: v_3_0_24~40
X-Git-Url: http://www.privoxy.org/gitweb/@default-cgi@/faq/%22https:/static/diff?a=commitdiff_plain;h=63044b565becfd1590f500934036204960a4b8e6;p=privoxy.git

pcre: Fix invalid reads in internal and outdated pcre code
---

diff --git a/pcre/pcre.c b/pcre/pcre.c
index 5149f8da..1297ed99 100644
--- a/pcre/pcre.c
+++ b/pcre/pcre.c
@@ -2486,6 +2486,7 @@ const uschar *ptr;
 compile_data compile_block;
 int brastack[BRASTACK_SIZE];
 uschar bralenstack[BRASTACK_SIZE];
+const size_t pattern_length = strlen(pattern);
 
 #ifdef DEBUG
 uschar *code_base, *code_end;
@@ -3011,6 +3012,17 @@ while ((c = *(++ptr)) != 0)
       /* Ordinary character or single-char escape */
 
       runlength++;
+
+      if (ptr > pattern + pattern_length)
+        {
+        *errorptr = "internal error";
+        goto PCRE_ERROR_RETURN;
+        }
+      if (ptr[1] >= tables_length - ctypes_offset)
+        {
+        *errorptr = ERR6;
+        goto PCRE_ERROR_RETURN;
+        }
       }
 
     /* This "while" is the end of the "do" above. */