]> granicus.if.org Git - php/commitdiff
Fix bug #60801 (strpbrk() mishandles NUL byte) on trunk only for now.
authorAdam Harvey <aharvey@php.net>
Mon, 30 Jan 2012 13:29:15 +0000 (13:29 +0000)
committerAdam Harvey <aharvey@php.net>
Mon, 30 Jan 2012 13:29:15 +0000 (13:29 +0000)
ext/standard/string.c
ext/standard/tests/strings/bug60801.phpt [new file with mode: 0644]

index be574109f59556396b239fe18c0de8bcc12551b1..0aade780856b9a00ba606ba77028790f6d742b13 100644 (file)
@@ -5315,7 +5315,7 @@ PHP_FUNCTION(strpbrk)
 {
        char *haystack, *char_list;
        int haystack_len, char_list_len;
-       char *p;
+       char *haystack_ptr, *cl_ptr;
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &haystack, &haystack_len, &char_list, &char_list_len) == FAILURE) {
                RETURN_FALSE;
@@ -5326,11 +5326,15 @@ PHP_FUNCTION(strpbrk)
                RETURN_FALSE;
        }
 
-       if ((p = strpbrk(haystack, char_list))) {
-               RETURN_STRINGL(p, (haystack + haystack_len - p), 1);
-       } else {
-               RETURN_FALSE;
+       for (haystack_ptr = haystack; haystack_ptr < (haystack + haystack_len); ++haystack_ptr) {
+               for (cl_ptr = char_list; cl_ptr < (char_list + char_list_len); ++cl_ptr) {
+                       if (*cl_ptr == *haystack_ptr) {
+                               RETURN_STRINGL(haystack_ptr, (haystack + haystack_len - haystack_ptr), 1);
+                       }
+               }
        }
+
+       RETURN_FALSE;
 }
 /* }}} */
 
diff --git a/ext/standard/tests/strings/bug60801.phpt b/ext/standard/tests/strings/bug60801.phpt
new file mode 100644 (file)
index 0000000..9587bda
Binary files /dev/null and b/ext/standard/tests/strings/bug60801.phpt differ