mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Fixed bug #35817 (unpack() does not decode odd number of hexadecimal values)
This commit is contained in:
parent
b5aeda4e65
commit
0e396980a1
2
NEWS
2
NEWS
@ -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)
|
||||
|
@ -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++) {
|
||||
|
29
ext/standard/tests/strings/bug35817.phpt
Normal file
29
ext/standard/tests/strings/bug35817.phpt
Normal 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"
|
||||
}
|
Loading…
Reference in New Issue
Block a user