X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=pcre%2Fpcre.c;h=1297ed9954c07cbde6114de8928bb4397076c1dc;hp=5149f8dad7dc2ed1d423e3257dc47e2ea088e819;hb=63044b565becfd1590f500934036204960a4b8e6;hpb=c3eca0beea485ff71af9136d777ac8d5c122c07c 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. */