]> granicus.if.org Git - php/commitdiff
MFH
authorAntony Dovgal <tony2001@php.net>
Thu, 20 Sep 2007 08:10:44 +0000 (08:10 +0000)
committerAntony Dovgal <tony2001@php.net>
Thu, 20 Sep 2007 08:10:44 +0000 (08:10 +0000)
ext/pcre/php_pcre.c
ext/pcre/tests/006.phpt [new file with mode: 0644]

index 9a5b7a7bcacbb8d9bfc694dd2486a53a5349313e..e48a97e0430df97f61ecbc87a7537d5a2e01ca3c 100644 (file)
@@ -1220,8 +1220,11 @@ static char *php_replace_in_subject(zval *regex, zval *replace, zval **subject,
                                efree(subject_value);
                                subject_value = result;
                                subject_len = *result_len;
+                       } else {
+                               efree(subject_value);
+                               return NULL;
                        }
-                       
+
                        zend_hash_move_forward(Z_ARRVAL_P(regex));
                }
 
diff --git a/ext/pcre/tests/006.phpt b/ext/pcre/tests/006.phpt
new file mode 100644 (file)
index 0000000..d1282bf
--- /dev/null
@@ -0,0 +1,22 @@
+--TEST--
+preg_replace() with array of failing regular expressions
+--FILE--
+<?php
+
+$text = '[CODE]&lt;td align=&quot;$stylevar[right]&quot;&gt;[/CODE]';
+$result = preg_replace(array('#\[(right)\](((?R)|[^[]+?|\[)*)\[/\\1\]#siU', '#\[(right)\](((?R)|[^[]+?|\[)*)\[/\\1\]#siU'), '', $text);
+var_dump($text);
+var_dump($result);
+
+$result = preg_replace('#\[(right)\](((?R)|[^[]+?|\[)*)\[/\\1\]#siU', '', $text);
+var_dump($text);
+var_dump($result);
+
+echo "Done\n";
+?>
+--EXPECTF--    
+string(58) "[CODE]&lt;td align=&quot;$stylevar[right]&quot;&gt;[/CODE]"
+NULL
+string(58) "[CODE]&lt;td align=&quot;$stylevar[right]&quot;&gt;[/CODE]"
+NULL
+Done