]> granicus.if.org Git - php/commitdiff
MFB51: Fixed bug #36148 (unpack("H*hex", $data) is adding an extra
authorIlia Alshanetsky <iliaa@php.net>
Thu, 26 Jan 2006 15:48:15 +0000 (15:48 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Thu, 26 Jan 2006 15:48:15 +0000 (15:48 +0000)
character to the end of the string).

ext/standard/pack.c
ext/standard/tests/strings/bug36148.phpt [new file with mode: 0644]

index 209ddf8de0cf275eb72f8f01151390988322b3e0..f088890a59a8635ac388089de4a820ef723c7eed 100644 (file)
@@ -692,7 +692,9 @@ PHP_FUNCTION(unpack)
                                                        len = size * 2;
                                                } 
 
-                                               len -= argb % 2;
+                                               if (argb > 0) { 
+                                                       len -= argb % 2;
+                                               }
 
                                                buf = emalloc(len + 1);
 
diff --git a/ext/standard/tests/strings/bug36148.phpt b/ext/standard/tests/strings/bug36148.phpt
new file mode 100644 (file)
index 0000000..06caac3
--- /dev/null
@@ -0,0 +1,29 @@
+--TEST--
+Bug #36148 (unpack("H*hex", $data) is adding an extra character to the end of the string)
+--FILE--
+<?php
+$values = array("a", "aa", "aaa", "aaaa");
+foreach ($values as $value) {
+       $a = pack("H*", $value);
+       $b = unpack("H*", $a);
+       echo $value.": ";
+       var_dump($b);
+}
+?>
+--EXPECT--
+a: array(1) {
+  [1]=>
+  string(2) "a0"
+}
+aa: array(1) {
+  [1]=>
+  string(2) "aa"
+}
+aaa: array(1) {
+  [1]=>
+  string(4) "aaa0"
+}
+aaaa: array(1) {
+  [1]=>
+  string(4) "aaaa"
+}