summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemi Collet <remi@php.net>2012-12-11 16:30:08 +0100
committerRemi Collet <remi@php.net>2012-12-11 16:30:08 +0100
commit4d8d5d83fce83c32a04cd8d8cf50d909ab101f38 (patch)
tree4e62956f55b58c5026187b339a48305b96ba105c
parenta9a5f7aca61d4bec9ce2cf5dc967bb7c0ed651cd (diff)
downloadphp-git-4d8d5d83fce83c32a04cd8d8cf50d909ab101f38.tar.gz
Fixed Bug #63738 unpack: back result with Z format
Fix result for empty string. Same output as perl perl -e 'print unpack("Z2","\0\0");' => "" perl -e 'print unpack("Z2","A\0");' => "A" perl -e 'print unpack("Z2","AB\0");' => "AB" perl -e 'print unpack("Z2","ABC\0");'=> "AB"
-rw-r--r--ext/standard/pack.c3
-rw-r--r--ext/standard/tests/strings/pack_Z.phpt25
2 files changed, 25 insertions, 3 deletions
diff --git a/ext/standard/pack.c b/ext/standard/pack.c
index 9894746f77..0472cb24a9 100644
--- a/ext/standard/pack.c
+++ b/ext/standard/pack.c
@@ -729,8 +729,7 @@ PHP_FUNCTION(unpack)
size = len;
/* Remove everything after the first null */
- s = 0;
- while (s++ <= len) {
+ for (s=0 ; s < len ; s++) {
if (input[inputpos + s] == pad)
break;
}
diff --git a/ext/standard/tests/strings/pack_Z.phpt b/ext/standard/tests/strings/pack_Z.phpt
index 8a2ee67767..4fd007ae0f 100644
--- a/ext/standard/tests/strings/pack_Z.phpt
+++ b/ext/standard/tests/strings/pack_Z.phpt
@@ -9,9 +9,15 @@ var_dump(
pack("Z4", "foo"),
pack("Z*", "foo"),
unpack("Z*", "foo\0\rbar\0 \t\r\n"),
- unpack("Z9", "foo\0\rbar\0 \t\r\n")
+ unpack("Z9", "foo\0\rbar\0 \t\r\n"),
+ unpack("Z2", "\0"),
+ unpack("Z2", "\0\0"),
+ unpack("Z2", "A\0"),
+ unpack("Z2", "AB\0"),
+ unpack("Z2", "ABC")
);
--EXPECTF--
+Warning: unpack(): Type Z: not enough input, need 2, have 1 in %s on line %d
string(0) ""
string(5) "foo%c%c"
string(4) "foo%c"
@@ -25,3 +31,20 @@ array(1) {
[1]=>
string(3) "foo"
}
+bool(false)
+array(1) {
+ [1]=>
+ string(0) ""
+}
+array(1) {
+ [1]=>
+ string(1) "A"
+}
+array(1) {
+ [1]=>
+ string(2) "AB"
+}
+array(1) {
+ [1]=>
+ string(2) "AB"
+}