From a9c5adcfc623faa9257e1811b2772cf8e3c1927d Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Tue, 12 May 2009 12:37:52 +0000 Subject: [PATCH] MFB: Fixed bug #47564 (unpacking unsigned long 32bit bit endian returns wrong result) --- ext/standard/pack.c | 7 +++++++ ext/standard/tests/strings/bug38770.phpt | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ext/standard/pack.c b/ext/standard/pack.c index 11bd899587..605aede826 100644 --- a/ext/standard/pack.c +++ b/ext/standard/pack.c @@ -777,6 +777,13 @@ PHP_FUNCTION(unpack) } v |= php_unpack(&input[inputpos], 4, issigned, map); + if (sizeof(long) > 4) { + if (type == 'l') { + v = (signed int) v; + } else { + v = (unsigned int) v; + } + } add_rt_assoc_long(return_value, n, v); break; } diff --git a/ext/standard/tests/strings/bug38770.phpt b/ext/standard/tests/strings/bug38770.phpt index efadf879c7..6d2d75f278 100644 --- a/ext/standard/tests/strings/bug38770.phpt +++ b/ext/standard/tests/strings/bug38770.phpt @@ -12,7 +12,7 @@ echo "Done\n"; --EXPECT-- Array ( - [1] => -30000 + [1] => 4294937296 ) Array ( -- 2.50.1