Bug #61038 [Opn->Csd]: unpack("a5", "str\0\0") does not work as expected
| From: | cataphract@php.net | Date: | Tue, 17 Apr 2012 21:44:08 +0000 |
| Subject: | Bug #61038 [Opn->Csd]: unpack("a5", "str\0\0") does not work as expected | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-169696@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=61038&edit=1
ID: 61038
Updated by: cataphract@php.net
Reported by: su dot hang at yahoo dot com
Summary: unpack("a5", "str\0\0") does not work as expected
-Status: Open
+Status: Closed
Type: Bug
Package: *General Issues
Operating System: Linux (3.0.0-15-generic)
PHP Version: Irrelevant
-Assigned To:
+Assigned To: cataphract
Block user comment: N
Private report: N
New Comment:
Fixed in master only due to BC concerns.
Thank you.
Previous Comments:
------------------------------------------------------------------------
[2012-04-17 21:23:54] cataphract@php.net
Automatic comment on behalf of googleguy@googleguy-virtualbox.(none)
Revision: http://git.php.net/?p=php-src.git;a=commit;h=4968fa644b0849321e1761e52b8db15dd46f9b75
Log: Fixed bug #61038; "Z" and better behavior for unpack()
------------------------------------------------------------------------
[2012-02-13 09:50:28] su dot hang at yahoo dot com
yes, that's right.
"a", as in the spec, represents arbitrary binary string, with null-padding. so, if the
specified unpack length is fixed, such as a constant number (like in
"unpack('a10')"), then the unpacked string from "a" should have that
length (unless, of course, if the input is insufficient).
since "a" is arbitrary binary string, if it has several "\0"s at the end, php
should not remove them as if it was a regular null-terminated string.
------------------------------------------------------------------------
[2012-02-13 08:39:00] cataphract@php.net
I'm not sure I understand. Is the problem that 'a' (as opposed to 'A') on
unpack should leave the string as is, as is the case with perl?
------------------------------------------------------------------------
[2012-02-10 16:53:54] su dot hang at yahoo dot com
sorry, please use the test script instead of the subject.
It is a bug because it is against the spec that "a" is an arbitrary binary string.
If specified length is 5 then it should be null-padded at the end, rather than being
truncated.
try unpack('a5', "\x12\x34\x00\x56\x00").
at least, to be consistent, the result string should terminate at the first "\0",
instead of the trailing one.
btw, perl is handling it correctly.
------------------------------------------------------------------------
[2012-02-10 16:34:10] cataphract@php.net
I don't see anything wrong here.
unpack("a5", "foo\0\0")
removes the NULL padding from the input string. The 5 specifies only the size of the input to
consume:
php > var_dump(unpack("a5", "foo\0"));
PHP Warning: unpack(): Type a: not enough input, need 5, have 4 in php shell code on line 1
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=61038
--
Edit this bug report at https://bugs.php.net/bug.php?id=61038&edit=1