]> granicus.if.org Git - php/commitdiff
correction for previous fix to bug #38770 (pack/unpack is broken on 64bit)
authorBrian Shire <shire@php.net>
Tue, 3 Apr 2007 19:50:40 +0000 (19:50 +0000)
committerBrian Shire <shire@php.net>
Tue, 3 Apr 2007 19:50:40 +0000 (19:50 +0000)
fix pack test, correct space to tabs

ext/standard/pack.c
ext/standard/tests/strings/pack.phpt

index 569266ea1ad4fce726060179a3687b39d70e2529..15924dba043485993c85491e9a5c559f8666cdce 100644 (file)
@@ -760,7 +760,7 @@ PHP_FUNCTION(unpack)
                                                        issigned = input[inputpos + (machine_little_endian ? (sizeof(int) - 1) : 0)] & 0x80;
                                                } else if (sizeof(long) > 4 && (input[inputpos + machine_endian_long_map[3]] & 0x80) == 0x80) {
                                                        v = ~INT_MAX;
-                                                }
+                                               }
 
                                                v |= php_unpack(&input[inputpos], sizeof(int), issigned, int_map);
                                                add_assoc_long(return_value, n, v);
@@ -775,15 +775,17 @@ PHP_FUNCTION(unpack)
                                                int *map = machine_endian_long_map;
                                                long v = 0;
 
-                                               if (type == 'l') {
+                                               if (type == 'l' || type == 'L') {
                                                        issigned = input[inputpos + (machine_little_endian ? 3 : 0)] & 0x80;
                                                } else if (type == 'N') {
+                                                       issigned = input[inputpos] & 0x80;
                                                        map = big_endian_long_map;
                                                } else if (type == 'V') {
+                                                       issigned = input[inputpos + 3] & 0x80;
                                                        map = little_endian_long_map;
                                                }
 
-                                               if (sizeof(long) > 4 && (input[inputpos + machine_endian_long_map[3]] & 0x80) == 0x80) {
+                                               if (sizeof(long) > 4 && issigned) {
                                                        v = ~INT_MAX;
                                                }
 
index b36eee1e5703b7c3486862326b82a1a5a168cb0e..60b546fce63fb52b98c217b239a3f796f8d4d207 100644 (file)
@@ -145,7 +145,7 @@ Array
 )
 Array
 (
-    [1] => 0
+    [1] => -1
 )
 Array
 (
@@ -185,7 +185,7 @@ Array
 )
 Array
 (
-    [1] => 0
+    [1] => -1
 )
 Array
 (
@@ -233,7 +233,7 @@ Array
 )
 Array
 (
-    [1] => 0
+    [1] => -1
 )
 Array
 (
@@ -305,7 +305,7 @@ Array
 )
 Array
 (
-    [1] => 0
+    [1] => -1
 )
 Array
 (