moriyoshi Sun Oct 6 02:21:34 2002 EDT
Modified files:
/php4/ext/mbstring php_mbregex.c
Log:
Warnings for empty regular expressions
Index: php4/ext/mbstring/php_mbregex.c
diff -u php4/ext/mbstring/php_mbregex.c:1.5 php4/ext/mbstring/php_mbregex.c:1.6
--- php4/ext/mbstring/php_mbregex.c:1.5 Tue Aug 27 11:32:04 2002
+++ php4/ext/mbstring/php_mbregex.c Sun Oct 6 02:21:34 2002
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_mbregex.c,v 1.5 2002/08/27 15:32:04 helly Exp $ */
+/* $Id: php_mbregex.c,v 1.6 2002/10/06 06:21:34 moriyoshi Exp $ */
#ifdef HAVE_CONFIG_H
@@ -307,7 +307,9 @@
mbre_free_registers(®s);
RETURN_FALSE;
}
-
+ if (regs.beg[0] == regs.end[0]) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty regular
+expression");
+ }
match_len = 1;
str = Z_STRVAL_PP(arg_string);
if (array) {
@@ -423,6 +425,10 @@
pos = 0;
while (err >= 0) {
err = mbre_search(&re, string, string_len, pos, string_len - pos,
®s);
+ if ( regs.beg[0] == regs.end[0] ) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty regular
+expression");
+ break;
+ }
if (err <= -2) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "mbregex search
failure in php_mbereg_replace_exec()");
break;
@@ -565,20 +571,19 @@
/* churn through str, generating array entries as we go */
while ((count != 0) &&
(err = mbre_search(&re, string, string_len, pos, string_len - pos,
®s)) >= 0) {
+ if ( regs.beg[0] == regs.end[0] ) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty regular
+expression");
+ break;
+ }
+
n = regs.beg[0];
- if (n == pos) {
- /* match is at start of string, return empty string */
- add_next_index_stringl(return_value, empty_string, 0, 1);
+ /* add it to the array */
+ if (n < string_len && n <= pos) {
+ n -= pos;
+ add_next_index_stringl(return_value, &string[pos], n, 1);
} else {
- /* On a real match */
- /* add it to the array */
- if (n < string_len) {
- n -= pos;
- add_next_index_stringl(return_value, &string[pos], n,
1);
- } else {
- err = -2;
- break;
- }
+ err = -2;
+ break;
}
/* point at our new starting point */
n = regs.end[0];
@@ -736,7 +741,6 @@
}
err = mbre_search(MBSTRG(search_re), str, len, pos, len - pos,
MBSTRG(search_regs));
-
if (err <= -2) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "mbregex search failure in
mbregex_search()");
RETVAL_FALSE;
@@ -744,6 +748,9 @@
MBSTRG(search_pos) = len;
RETVAL_FALSE;
} else {
+ if (MBSTRG(search_regs)->beg[0] == MBSTRG(search_regs)->end[0]) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty regular
+expression");
+ }
switch (mode) {
case 1:
if (array_init(return_value) != FAILURE) {
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php