diff options
author | Andrey Hristov <andrey@php.net> | 2002-10-02 18:58:09 +0000 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2002-10-02 18:58:09 +0000 |
commit | 83a0f20381bfae0f678ff2c339d2a3e621c3f3d1 (patch) | |
tree | 97aad4a7b30d54bc1761b0e25d22c23411ee56ba | |
parent | 2092d80230a1327e3796bcc4e405667f4da3f459 (diff) | |
download | php-git-83a0f20381bfae0f678ff2c339d2a3e621c3f3d1.tar.gz |
Making strrchr() binary safe.
Test case added.
-rw-r--r-- | ext/standard/string.c | 4 | ||||
-rw-r--r-- | ext/standard/tests/strings/002.phpt | 13 |
2 files changed, 16 insertions, 1 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c index 540908db96..f3d08a6bcb 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1487,6 +1487,7 @@ PHP_FUNCTION(strrchr) { zval **haystack, **needle; char *found = NULL; + long found_offset; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &haystack, &needle) == FAILURE) { @@ -1503,7 +1504,8 @@ PHP_FUNCTION(strrchr) } if (found) { - RETURN_STRING(found, 1); + found_offset = found - Z_STRVAL_PP(haystack); + RETURN_STRINGL(found, Z_STRLEN_PP(haystack) - found_offset, 1); } else { RETURN_FALSE; } diff --git a/ext/standard/tests/strings/002.phpt b/ext/standard/tests/strings/002.phpt new file mode 100644 index 0000000000..e13593d1af --- /dev/null +++ b/ext/standard/tests/strings/002.phpt @@ -0,0 +1,13 @@ +--TEST-- +Test whether strstr() and strrchr() are binary safe. +--POST-- +--GET-- +--FILE-- +<?php +$s = "alabala nica".chr(0)."turska panica"; +var_dump(strlen(strstr($s, "nic"))); +var_dump(strlen(strrchr($s," nic"))); +?> +--EXPECT-- +int(18) +int(19)
\ No newline at end of file |