Edit report at https://bugs.php.net/bug.php?id=61764&edit=1
ID: 61764 Updated by: cataphr...@php.net Reported by: pgajdos at suse dot com Summary: output of unpack while 'I' used -Status: Assigned +Status: Closed Type: Bug Package: Unknown/Other Function Operating System: Linux PHP Version: 5.3.10 Assigned To: cataphract Block user comment: N Private report: N New Comment: This bug has been fixed in SVN. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. For Windows: http://windows.php.net/snapshots/ Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2012-04-23 21:11:04] cataphr...@php.net Automatic comment on behalf of cataphract Revision: http://git.php.net/?p=php-src.git;a=commit;h=8d748e5de519867d9b6ce40e3ea28a209b07768f Log: Fixed bug #61764: 'I' unpacks n as signed if n > 2^31-1 on LP64 ------------------------------------------------------------------------ [2012-04-20 07:47:00] cataphr...@php.net Verified. If PHP can represent the unpacked unsigned number with its integer type, it should never return a negative number. The result of pack() is correct: http://www.wolframalpha.com/input/?i=%28-30000+mod+2%5E32%29+in+hex ffff8ad0_16 $ php -r "print_r(unpack('H*', pack('I', -30000)));" Array ( [1] => d08affff ) ------------------------------------------------------------------------ [2012-04-18 13:32:15] pgajdos at suse dot com Description: ------------ php -r "print_r(unpack('I', pack('I', -30000))); gives 4294937296 on s390x but -30000 on x86_64. According to manual I think correct value should be 4294937296 on x86_64. Also perl returns this number for perl -e "print unpack('I', pack('I', -30000))" for these two architectures. Or have I misunderstood something? ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=61764&edit=1