summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/pack.c7
-rw-r--r--ext/standard/tests/strings/bug38770.phpt2
2 files changed, 8 insertions, 1 deletions
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
(