From 15df0cafa343230f1df8151e35539da04fbb638f Mon Sep 17 00:00:00 2001 From: lacatoire Date: Tue, 18 Aug 2026 08:18:45 +0200 Subject: [PATCH] ext/standard: name the real parameter in the unpack() offset error The message cross-references argument #2 as $data, a name unpack() lost in 25f1c405ff when the ext/standard parameters were renamed for 8.0; it is $string. The same phrasing elsewhere, in substr_count() and friends, names the real parameter. --- ext/standard/pack.c | 2 +- ext/standard/tests/strings/unpack_offset.phpt | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ext/standard/pack.c b/ext/standard/pack.c index c8cbf8613f63..969f5a2db742 100644 --- a/ext/standard/pack.c +++ b/ext/standard/pack.c @@ -803,7 +803,7 @@ PHP_FUNCTION(unpack) if (offset < 0 || offset > inputlen) { - zend_argument_value_error(3, "must be contained in argument #2 ($data)"); + zend_argument_value_error(3, "must be contained in argument #2 ($string)"); RETURN_THROWS(); } diff --git a/ext/standard/tests/strings/unpack_offset.phpt b/ext/standard/tests/strings/unpack_offset.phpt index a3046c32d6f9..36d3f49eb495 100644 --- a/ext/standard/tests/strings/unpack_offset.phpt +++ b/ext/standard/tests/strings/unpack_offset.phpt @@ -21,9 +21,17 @@ try { } catch (Throwable $e) { echo $e::class, ': ', $e->getMessage(), "\n"; } + +/* the message names argument #2, so that name has to be the real one */ +foreach ((new ReflectionFunction('unpack'))->getParameters() as $parameter) { + echo '$', $parameter->getName(), "\n"; +} ?> --EXPECT-- 0x01020304 0x05060708 0x01020304 0x05060708 -ValueError: unpack(): Argument #3 ($offset) must be contained in argument #2 ($data) -ValueError: unpack(): Argument #3 ($offset) must be contained in argument #2 ($data) +ValueError: unpack(): Argument #3 ($offset) must be contained in argument #2 ($string) +ValueError: unpack(): Argument #3 ($offset) must be contained in argument #2 ($string) +$format +$string +$offset