aharvey                                  Mon, 30 Jan 2012 13:29:15 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=322934

Log:
Fix bug #60801 (strpbrk() mishandles NUL byte) on trunk only for now.

Bug: https://bugs.php.net/60801 (Assigned) strpbrk() mishandles NUL byte
      
Changed paths:
    U   php/php-src/trunk/ext/standard/string.c
    A   php/php-src/trunk/ext/standard/tests/strings/bug60801.phpt

Modified: php/php-src/trunk/ext/standard/string.c
===================================================================
--- php/php-src/trunk/ext/standard/string.c     2012-01-30 13:02:10 UTC (rev 
322933)
+++ php/php-src/trunk/ext/standard/string.c     2012-01-30 13:29:15 UTC (rev 
322934)
@@ -5315,7 +5315,7 @@
 {
        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 @@
                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;
 }
 /* }}} */


Added: php/php-src/trunk/ext/standard/tests/strings/bug60801.phpt
===================================================================
--- php/php-src/trunk/ext/standard/tests/strings/bug60801.phpt                  
        (rev 0)
+++ php/php-src/trunk/ext/standard/tests/strings/bug60801.phpt  2012-01-30 
13:29:15 UTC (rev 322934)
@@ -0,0 +1,23 @@
+--TEST--
+Bug #60801 (strpbrk() mishandles NUL byte)
+--FILE--
+<?php
+$haystack = "foob\x00ar";
+$needle = "a\x00b";
+
+var_dump(strpbrk($haystack, 'ar'));
+var_dump(strpbrk($haystack, "\x00"));
+var_dump(strpbrk($haystack, $needle));
+var_dump(strpbrk('foobar', $needle));
+var_dump(strpbrk("\x00", $needle));
+var_dump(strpbrk('xyz', $needle));
+var_dump(strpbrk($haystack, 'xyz'));
+?>
+--EXPECT--
+string(2) "ar"
+string(3) "
+string(4) "b
+string(3) "bar"
+string(1) "
+bool(false)
+bool(false)


Property changes on: php/php-src/trunk/ext/standard/tests/strings/bug60801.phpt
___________________________________________________________________
Added: svn:mime-type
   + text/x-php

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to