]> granicus.if.org Git - php/commitdiff
add new error constant PREG_JIT_STACKLIMIT_ERROR
authorChristoph M. Becker <cmbecker69@gmx.de>
Sun, 26 Jul 2015 16:33:01 +0000 (18:33 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Sun, 26 Jul 2015 21:40:38 +0000 (23:40 +0200)
ext/pcre/php_pcre.c
ext/pcre/tests/preg_match_error3.phpt [new file with mode: 0644]

index 8e40f846732ace8ca1b718632814c8608f431682..e57bbd9e3847fc6544eb574dfc1e4c010eede42e 100644 (file)
@@ -50,7 +50,8 @@ enum {
        PHP_PCRE_BACKTRACK_LIMIT_ERROR,
        PHP_PCRE_RECURSION_LIMIT_ERROR,
        PHP_PCRE_BAD_UTF8_ERROR,
-       PHP_PCRE_BAD_UTF8_OFFSET_ERROR
+       PHP_PCRE_BAD_UTF8_OFFSET_ERROR,
+       PHP_PCRE_JIT_STACKLIMIT_ERROR
 };
 
 
@@ -77,6 +78,12 @@ static void pcre_handle_exec_error(int pcre_code) /* {{{ */
                case PCRE_ERROR_BADUTF8_OFFSET:
                        preg_code = PHP_PCRE_BAD_UTF8_OFFSET_ERROR;
                        break;
+               
+#ifdef PCRE_STUDY_JIT_COMPILE
+               case PCRE_ERROR_JIT_STACKLIMIT:
+                       preg_code = PHP_PCRE_JIT_STACKLIMIT_ERROR;
+                       break;
+#endif
 
                default:
                        preg_code = PHP_PCRE_INTERNAL_ERROR;
@@ -169,6 +176,7 @@ static PHP_MINIT_FUNCTION(pcre)
        REGISTER_LONG_CONSTANT("PREG_RECURSION_LIMIT_ERROR", PHP_PCRE_RECURSION_LIMIT_ERROR, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("PREG_BAD_UTF8_ERROR", PHP_PCRE_BAD_UTF8_ERROR, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("PREG_BAD_UTF8_OFFSET_ERROR", PHP_PCRE_BAD_UTF8_OFFSET_ERROR, CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("PREG_JIT_STACKLIMIT_ERROR", PHP_PCRE_JIT_STACKLIMIT_ERROR, CONST_CS | CONST_PERSISTENT);
        REGISTER_STRING_CONSTANT("PCRE_VERSION", (char *)pcre_version(), CONST_CS | CONST_PERSISTENT);
 
        return SUCCESS;
diff --git a/ext/pcre/tests/preg_match_error3.phpt b/ext/pcre/tests/preg_match_error3.phpt
new file mode 100644 (file)
index 0000000..05a9baa
--- /dev/null
@@ -0,0 +1,10 @@
+--TEST--
+Test preg_match() function : error conditions - jit stacklimit exhausted
+--FILE--
+<?php
+var_dump(preg_match('/^(foo)+$/', str_repeat('foo', 8192)));
+var_dump(preg_last_error() === PREG_JIT_STACKLIMIT_ERROR);
+?>
+--EXPECT--
+bool(false)
+bool(true)