Fixed bug #35817 (unpack() does not decode odd number of hexadecimal values)

This commit is contained in:
Ilia Alshanetsky 2005-12-28 20:55:14 +00:00
parent b5aeda4e65
commit 0e396980a1
3 changed files with 37 additions and 3 deletions

2
NEWS
View File

@ -9,6 +9,8 @@ PHP NEWS
(Andrey)
- Fixed bug #35821 (array_map() segfaults when exception is throwed from
the callback). (Tony)
- Fixed bug #35817 (unpack() does not decode odd number of hexadecimal values).
(Ilia)
- Fixed bug #35781 (stream_filter_append() can cause segfault). (Tony)
- Fixed bug #35759 (mysqli_stmt_bind_result() makes huge allocation when
column empty). (Andrey)

View File

@ -245,7 +245,7 @@ PHP_FUNCTION(pack)
switch ((int) code) {
case 'h':
case 'H':
INC_OUTPUTPOS((arg + 1) / 2,1) /* 4 bit per arg */
INC_OUTPUTPOS((arg + (arg % 2)) / 2,1) /* 4 bit per arg */
break;
case 'a':
@ -538,7 +538,7 @@ PHP_FUNCTION(unpack)
while (formatlen-- > 0) {
char type = *(format++);
char c;
int arg = 1;
int arg = 1, argb;
char *name;
int namelen;
int size=0;
@ -563,6 +563,7 @@ PHP_FUNCTION(unpack)
/* Get of new value in array */
name = format;
argb = arg;
while (formatlen > 0 && *format != '/') {
formatlen--;
@ -592,7 +593,7 @@ PHP_FUNCTION(unpack)
case 'h':
case 'H':
size = (arg > 0) ? arg / 2 : arg;
size = (arg > 0) ? (arg + (arg % 2)) / 2 : arg;
arg = 1;
break;
@ -691,6 +692,8 @@ PHP_FUNCTION(unpack)
len = size * 2;
}
len -= argb % 2;
buf = emalloc(len + 1);
for (ipos = opos = 0; opos < len; opos++) {

View File

@ -0,0 +1,29 @@
--TEST--
Bug #35817 (unpack() does not decode odd number of hexadecimal values)
--FILE--
<?php
$a = pack("H3","181");
$b = unpack("H3", $a);
var_dump($b);
$a = pack("H2","18");
$b = unpack("H2", $a);
var_dump($b);
$a = pack("H","1");
$b = unpack("H", $a);
var_dump($b);
?>
--EXPECT--
array(1) {
[1]=>
string(3) "181"
}
array(1) {
[1]=>
string(2) "18"
}
array(1) {
[1]=>
string(1) "1"
}