Edit report at https://bugs.php.net/bug.php?id=61038&edit=1
ID: 61038
User updated by: su dot hang at yahoo dot com
Reported by: su dot hang at yahoo dot com
-Summary: unpack("a5", "str\0") does not work as expected
+Summary: unpack("a5", "str\0\0") does not work as expected
Status: Not a bug
Type: Bug
Package: *General Issues
Operating System: Linux (3.0.0-15-generic)
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
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.
Previous Comments:
------------------------------------------------------------------------
[2012-02-10 16:34:10] [email protected]
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
------------------------------------------------------------------------
[2012-02-10 09:20:26] su dot hang at yahoo dot com
Description:
------------
related bug: https://bugs.php.net/bug.php?id=39588
if unpacking from a binary string ending with any number of "\0"'s, and the
unpack string length is given, the resulted string does not have the right
length.
for example, unpack("a5", "str\0") should result in a 5-byte-long string, but
it returns a 3-byte-long instead.
Test script:
---------------
<?php
$var = "str";
$packed = pack("a5", $var); // 5 bytes long NULL-padded string
var_dump(unpack("a5", $packed));
Expected result:
----------------
array(1) {
[1]=>
string(5) "str\0\0"
}
Actual result:
--------------
array(1) {
[1]=>
string(3) "str"
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=61038&edit=1