summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2015-02-28 22:37:46 +0800
committerXinchen Hui <laruence@php.net>2015-02-28 22:37:46 +0800
commit54e2020ee3e6142a86db03f1a9d47bc763334dbb (patch)
treed69719b335b46c0de7b6946d071d22d8ac321e46
parent49d19f6c7caafceefb0f0ac6f130fe0f99c80f38 (diff)
downloadphp-git-54e2020ee3e6142a86db03f1a9d47bc763334dbb.tar.gz
Fixed bug #69144 (strtr not replacing with partly matching replace pairs)
-rw-r--r--ext/standard/string.c2
-rw-r--r--ext/standard/tests/strings/bug69144.phpt15
2 files changed, 16 insertions, 1 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c
index b7e71283b9..b55abb7fea 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -3140,7 +3140,7 @@ static void php_strtr_array(zval *return_value, zend_string *input, HashTable *p
pos++;
}
}
- if (result.s && result.s->len) {
+ if (result.s) {
smart_str_appendl(&result, str + old_pos, slen - old_pos);
smart_str_0(&result);
RETVAL_STR(result.s);
diff --git a/ext/standard/tests/strings/bug69144.phpt b/ext/standard/tests/strings/bug69144.phpt
new file mode 100644
index 0000000000..ded915b4c0
--- /dev/null
+++ b/ext/standard/tests/strings/bug69144.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #69144 (strtr not replacing with partly matching replace pairs)
+--FILE--
+<?php
+$tests = array('bar' => '', 'foo' => 'o', 'foobar' => '', 'hello' => 'hello');
+
+foreach ($tests as $input => $expected) {
+ if ($expected !== ($actual = strtr($input, array("fo" => "", "foobar" => "", "bar" => "")))) {
+ echo "KO `$input` became `$actual` instead of `$expected`\n";
+ }
+}
+echo "okey";
+?>
+--EXPECT--
+okey