1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Fix GH-18976: pack with h or H format string overflow.

adding with its own remainder, INT_MAX overflows here (negative values are
discarded).

close GH-18977
This commit is contained in:
David Carlier
2025-06-29 13:03:43 +01:00
parent aee1d7fb96
commit 865739e5b1
3 changed files with 17 additions and 1 deletions

2
NEWS
View File

@@ -33,6 +33,8 @@ PHP NEWS
- Standard:
. Fix misleading errors in printf(). (nielsdos)
. Fix RCN violations in array functions. (nielsdos)
. Fixed GH-18976 pack() overflow with h/H format and INT_MAX repeater value.
(David Carlier)
- Streams:
. Fixed GH-13264 (fgets() and stream_get_line() do not return false on filter

View File

@@ -388,7 +388,7 @@ too_few_args:
switch ((int) code) {
case 'h':
case 'H':
INC_OUTPUTPOS((arg + (arg % 2)) / 2,1) /* 4 bit per arg */
INC_OUTPUTPOS((arg / 2) + (arg % 2),1) /* 4 bit per arg */
break;
case 'a':

View File

@@ -0,0 +1,14 @@
--TEST--
GH-18976 (pack overflow with h/H format)
--INI--
memory_limit=-1
--FILE--
<?php
pack('h2147483647', 1);
pack('H2147483647', 1);
?>
--EXPECTF--
Warning: pack(): Type h: not enough characters in string in %s on line %d
Warning: pack(): Type H: not enough characters in string in %s on line %d