nlopess Thu Jun 15 15:35:50 2006 UTC
Modified files:
/php-src/ext/pcre php_pcre.c
/php-src/ext/pcre/tests bug37800.phpt
Log:
MFB: fix bug #37800
http://cvs.php.net/viewcvs.cgi/php-src/ext/pcre/php_pcre.c?r1=1.185&r2=1.186&diff_format=u
Index: php-src/ext/pcre/php_pcre.c
diff -u php-src/ext/pcre/php_pcre.c:1.185 php-src/ext/pcre/php_pcre.c:1.186
--- php-src/ext/pcre/php_pcre.c:1.185 Wed Jun 14 18:04:01 2006
+++ php-src/ext/pcre/php_pcre.c Thu Jun 15 15:35:49 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pcre.c,v 1.185 2006/06/14 18:04:01 nlopess Exp $ */
+/* $Id: php_pcre.c,v 1.186 2006/06/15 15:35:49 nlopess Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -1083,7 +1083,7 @@
if (limit != -1)
limit--;
- } else if (count == PCRE_ERROR_NOMATCH) {
+ } else if (count == PCRE_ERROR_NOMATCH || limit == 0) {
/* If we previously set PCRE_NOTEMPTY after a null
match,
this is not necessarily the end. We need to advance
the start offset, and continue. Fudge the offset
values
http://cvs.php.net/viewcvs.cgi/php-src/ext/pcre/tests/bug37800.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/pcre/tests/bug37800.phpt
diff -u /dev/null php-src/ext/pcre/tests/bug37800.phpt:1.2
--- /dev/null Thu Jun 15 15:35:50 2006
+++ php-src/ext/pcre/tests/bug37800.phpt Thu Jun 15 15:35:50 2006
@@ -0,0 +1,31 @@
+--TEST--
+Bug #37800 (preg_replace() limit parameter odd behaviour)
+--FILE--
+<?php
+$s_string = '1111111111';
+$s_search = '/1/';
+$s_replace = 'One ';
+$i_limit = 1;
+$i_count = 0;
+
+$s_output = preg_replace($s_search, $s_replace, $s_string, $i_limit,
+$i_count);
+echo "Output = " . var_export($s_output, True) . "\n";
+echo "Count = $i_count\n";
+var_dump(preg_last_error() === PREG_NO_ERROR);
+
+$i_limit = strlen($s_string);
+$s_output = preg_replace($s_search, $s_replace, $s_string, $i_limit,
+$i_count);
+echo "Output = " . var_export($s_output, True) . "\n";
+echo "Count = $i_count\n";
+var_dump(preg_last_error() === PREG_NO_ERROR);
+
+?>
+--EXPECT--
+Output = 'One 111111111'
+Count = 1
+bool(true)
+Output = 'One One One One One One One One One One '
+Count = 10
+bool(true)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php