From bd4add59f72a7f7576611a1d3d680bbf371c1e3e Mon Sep 17 00:00:00 2001 From: Brian Shire Date: Tue, 3 Apr 2007 19:50:40 +0000 Subject: [PATCH] correction for previous fix to bug #38770 (pack/unpack is broken on 64bit) fix pack test, correct space to tabs --- ext/standard/pack.c | 8 +++++--- ext/standard/tests/strings/pack.phpt | 8 ++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ext/standard/pack.c b/ext/standard/pack.c index 569266ea1a..15924dba04 100644 --- a/ext/standard/pack.c +++ b/ext/standard/pack.c @@ -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; } diff --git a/ext/standard/tests/strings/pack.phpt b/ext/standard/tests/strings/pack.phpt index b36eee1e57..60b546fce6 100644 --- a/ext/standard/tests/strings/pack.phpt +++ b/ext/standard/tests/strings/pack.phpt @@ -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 ( -- 2.50.1