Edit report at https://bugs.php.net/bug.php?id=63738&edit=1
ID: 63738 Updated by: r...@php.net Reported by: r...@php.net Summary: unpack: back result with Z format -Status: Assigned +Status: Closed Type: Bug Package: Strings related Operating System: GNU/Linux (Fedora 17) PHP Version: 5.5Git-2012-12-11 (snap) Assigned To: remi Block user comment: N Private report: N New Comment: Automatic comment on behalf of remi Revision: http://git.php.net/?p=php-src.git;a=commit;h=4d8d5d83fce83c32a04cd8d8cf50d909ab101f38 Log: Fixed Bug #63738 unpack: back result with Z format Previous Comments: ------------------------------------------------------------------------ [2012-12-11 14:15:38] r...@php.net There still a problem with new 'z' format: php -r '$a="\x00\x00\x00\x00"; var_dump($a); var_dump(unpack("Z4foo", $a));' Actual result: string(4) "^@^@^@^@" array(1) { ["foo"]=> string(1) "^@" } When we expect: string(4) "^@^@^@^@" array(1) { ["foo"]=> string(0) "" } ------------------------------------------------------------------------ [2012-12-11 13:58:02] ahar...@php.net Snap. :) ------------------------------------------------------------------------ [2012-12-11 13:57:35] ahar...@php.net This was intentional â specifically, it was to fix bug #61038. Copy-pasting from the migration guide (http://php.net/manual/en/migration55.changed-functions.php): "unpack()'s a format no longer strips trailing null bytes, bringing it into line with Perl's behaviour." ------------------------------------------------------------------------ [2012-12-11 13:57:30] r...@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php Sorry, haven't read carefully UPGRADING - pack()/unpack() had the following changes, which bring it more in line with Perl's behavior: - Implemented format character "Z": NUL-padded string - "a" now does not remove trailing NUL characters on unpack() anymore - "A" will now strip all trailing ASCII whitespace on unpack() (it used to remove only trailing spaces). ------------------------------------------------------------------------ [2012-12-11 13:51:09] r...@php.net Description: ------------ Seems a regression between 5.4.9 and 5.5.0-dev This breaks Archive_Tar Test script: --------------- <?php $a="AB\x00\x00"; var_dump($a); var_dump(unpack("a4foo", $a)); Expected result: ---------------- With php 5.4.9: string(4) "AB^@^@" array(1) { ["foo"]=> string(2) "AB" } Actual result: -------------- With php 5.5.0-dev: string(4) "AB^@^@" array(1) { ["foo"]=> string(4) "AB^@^@" } ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=63738&edit=1