fix bug #37800: preg_replace() limit parameter odd behaviour

#this is a regression in PHP_5_2 and HEAD branches only
This commit is contained in:
Nuno Lopes 2006-06-15 15:33:25 +00:00
parent 954acfe261
commit c3ed91477a
2 changed files with 32 additions and 1 deletions

View File

@ -1091,7 +1091,7 @@ PHPAPI char *php_pcre_replace(char *regex, int regex_len,
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

View File

@ -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)