From 4dc8b1ad111f3b1ed74b01fdf5efcc9d58858230 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Mon, 30 Jan 2012 13:29:15 +0000 Subject: [PATCH] Fix bug #60801 (strpbrk() mishandles NUL byte) on trunk only for now. --- ext/standard/string.c | 14 +++++++++----- ext/standard/tests/strings/bug60801.phpt | Bin 0 -> 489 bytes 2 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 ext/standard/tests/strings/bug60801.phpt diff --git a/ext/standard/string.c b/ext/standard/string.c index be574109f5..0aade78085 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -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 index 0000000000000000000000000000000000000000..9587bdafa4aa29168c99ce462a403c140c4d9f86 GIT binary patch literal 489 zcmah`U5mmn5cD~}Vu?Zu(pm(ubpc%M3F+ zyAvtb{%S2Ho88aQ?0W;R1Fp?Xs?F6EaJ$%0#m6YHu-ME&=UE__lwaR-A3dXK8m6oj zs@!JkaD_4OQ