summaryrefslogtreecommitdiffstats
path: root/php-wip2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'php-wip2.patch')
-rw-r--r--php-wip2.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/php-wip2.patch b/php-wip2.patch
new file mode 100644
index 0000000..91535e9
--- /dev/null
+++ b/php-wip2.patch
@@ -0,0 +1,75 @@
+From 4d8d5d83fce83c32a04cd8d8cf50d909ab101f38 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Tue, 11 Dec 2012 16:30:08 +0100
+Subject: [PATCH] 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"
+---
+ ext/standard/pack.c | 3 +--
+ 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 9894746..0472cb2 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 8a2ee67..4fd007a 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"
++}
+--
+1.7.11.5
+