mirror of
https://github.com/php/php-src.git
synced 2024-11-28 12:26:37 +08:00
Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0: Fixed #75539 and #74183 - preg_last_error not returning error code after error
This commit is contained in:
commit
f5c0754f6e
@ -356,6 +356,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
|
||||
#endif
|
||||
php_error_docref(NULL, E_WARNING,
|
||||
p < ZSTR_VAL(regex) + ZSTR_LEN(regex) ? "Null byte in regex" : "Empty regular expression");
|
||||
pcre_handle_exec_error(PCRE_ERROR_INTERNAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -369,6 +370,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
|
||||
}
|
||||
#endif
|
||||
php_error_docref(NULL,E_WARNING, "Delimiter must not be alphanumeric or backslash");
|
||||
pcre_handle_exec_error(PCRE_ERROR_INTERNAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -419,6 +421,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
|
||||
} else {
|
||||
php_error_docref(NULL,E_WARNING, "No ending matching delimiter '%c' found", delimiter);
|
||||
}
|
||||
pcre_handle_exec_error(PCRE_ERROR_INTERNAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -467,6 +470,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
|
||||
} else {
|
||||
php_error_docref(NULL,E_WARNING, "Null byte in regex");
|
||||
}
|
||||
pcre_handle_exec_error(PCRE_ERROR_INTERNAL);
|
||||
efree(pattern);
|
||||
#if HAVE_SETLOCALE
|
||||
if (key != regex) {
|
||||
@ -497,6 +501,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
|
||||
}
|
||||
#endif
|
||||
php_error_docref(NULL,E_WARNING, "Compilation failed: %s at offset %d", error, erroffset);
|
||||
pcre_handle_exec_error(PCRE_ERROR_INTERNAL);
|
||||
efree(pattern);
|
||||
if (tables) {
|
||||
pefree((void*)tables, 1);
|
||||
@ -528,6 +533,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
|
||||
}
|
||||
if (error != NULL) {
|
||||
php_error_docref(NULL, E_WARNING, "Error while studying pattern");
|
||||
pcre_handle_exec_error(PCRE_ERROR_INTERNAL);
|
||||
}
|
||||
} else {
|
||||
extra = NULL;
|
||||
@ -564,6 +570,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
|
||||
}
|
||||
#endif
|
||||
php_error_docref(NULL, E_WARNING, "Internal pcre_fullinfo() error %d", rc);
|
||||
pcre_handle_exec_error(PCRE_ERROR_INTERNAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -575,6 +582,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
|
||||
}
|
||||
#endif
|
||||
php_error_docref(NULL, E_WARNING, "Internal pcre_fullinfo() error %d", rc);
|
||||
pcre_handle_exec_error(PCRE_ERROR_INTERNAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
15
ext/pcre/tests/bug74183.phpt
Normal file
15
ext/pcre/tests/bug74183.phpt
Normal file
@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
Bug #74183 - preg_last_error not returning error code after error
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$sRegex = "/([A-Z]|[a-z]|[0-9]| |Ñ|ñ|!|"|%|&|'|´|-|:|;|>|=|<|@|_|,|\{|\}|`|~|á|é|í|ó|ú|Á|É|Í|Ó|Ú|ü|Ü){1,300}/";
|
||||
$sTest = "Hello world";
|
||||
|
||||
var_dump(preg_match($sRegex, $sTest));
|
||||
var_dump(preg_last_error() === \PREG_INTERNAL_ERROR);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: preg_match(): Compilation failed: regular expression is too large at offset %s in %s on line %s
|
||||
bool(false)
|
||||
bool(true)
|
13
ext/pcre/tests/bug75539.phpt
Normal file
13
ext/pcre/tests/bug75539.phpt
Normal file
@ -0,0 +1,13 @@
|
||||
--TEST--
|
||||
Bug #75539 - Recursive call errors are not reported by preg_last_error()
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
var_dump(preg_match('/((?1)?z)/', ''));
|
||||
var_dump(preg_last_error() === \PREG_INTERNAL_ERROR);
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: preg_match(): Compilation failed: recursive call could loop indefinitely at offset %s in %s on line %s
|
||||
bool(false)
|
||||
bool(true)
|
Loading…
Reference in New Issue
Block a user