mirror of
https://github.com/php/php-src.git
synced 2024-09-23 02:47:26 +00:00
Merge branch '5.4'
This commit is contained in:
commit
d77cde46e1
@ -815,16 +815,14 @@ PHP_FUNCTION(unpack)
|
||||
|
||||
case 'i':
|
||||
case 'I': {
|
||||
long v = 0;
|
||||
long v;
|
||||
int issigned = 0;
|
||||
|
||||
if (type == 'i') {
|
||||
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);
|
||||
v = php_unpack(&input[inputpos], sizeof(int), issigned, int_map);
|
||||
add_assoc_long(return_value, n, v);
|
||||
break;
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
foreach (array('N','I','l') as $v) {
|
||||
foreach (array('N','l') as $v) {
|
||||
print_r(unpack($v, pack($v, -30000)));
|
||||
}
|
||||
|
||||
@ -22,8 +22,4 @@ Array
|
||||
(
|
||||
[1] => -30000
|
||||
)
|
||||
Array
|
||||
(
|
||||
[1] => -30000
|
||||
)
|
||||
Done
|
||||
|
15
ext/standard/tests/strings/bug61764.phpt
Normal file
15
ext/standard/tests/strings/bug61764.phpt
Normal file
@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
Bug #61764: 'I' unpacks n as signed if n > 2^31-1 on LP64
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
|
||||
--FILE--
|
||||
<?php
|
||||
//expected -30000 mod 2^32 = 4294937296, and not -30000
|
||||
//because we can represent 4294937296 with our PHP int type
|
||||
print_r(unpack('I', pack('L', -30000)));
|
||||
--EXPECT--
|
||||
Array
|
||||
(
|
||||
[1] => 4294937296
|
||||
)
|
Loading…
Reference in New Issue
Block a user