diff options
author | Remi Collet <remi@php.net> | 2012-12-11 16:30:08 +0100 |
---|---|---|
committer | Remi Collet <remi@php.net> | 2012-12-11 16:30:08 +0100 |
commit | 4d8d5d83fce83c32a04cd8d8cf50d909ab101f38 (patch) | |
tree | 4e62956f55b58c5026187b339a48305b96ba105c | |
parent | a9a5f7aca61d4bec9ce2cf5dc967bb7c0ed651cd (diff) | |
download | php-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.c | 3 | ||||
-rw-r--r-- | ext/standard/tests/strings/pack_Z.phpt | 25 |
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" +} |