From 048cc9ba78f740e4dcd400f372b9ca2876a26117 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 22 Sep 2020 14:00:48 +0200 Subject: [PATCH] Convert unpack offset warning to ValueError --- ext/standard/pack.c | 5 +++-- ext/standard/tests/strings/unpack_offset.phpt | 13 +++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ext/standard/pack.c b/ext/standard/pack.c index 013173dc738..bbae59c6ae9 100644 --- a/ext/standard/pack.c +++ b/ext/standard/pack.c @@ -731,9 +731,10 @@ PHP_FUNCTION(unpack) if (offset < 0 || offset > inputlen) { - php_error_docref(NULL, E_WARNING, "Offset " ZEND_LONG_FMT " is out of input range" , offset); - RETURN_FALSE; + zend_argument_value_error(3, "must be contained in argument #2 ($data)"); + RETURN_THROWS(); } + input += offset; inputlen -= offset; diff --git a/ext/standard/tests/strings/unpack_offset.phpt b/ext/standard/tests/strings/unpack_offset.phpt index 451dd367246..bd787859c11 100644 --- a/ext/standard/tests/strings/unpack_offset.phpt +++ b/ext/standard/tests/strings/unpack_offset.phpt @@ -10,7 +10,20 @@ printf("0x%08x 0x%08x\n", $a[1], $a[2]); printf("0x%08x 0x%08x\n", unpack("l", $data, 3)[1], unpack("@4/l", $data, 3)[1]); + +try { + unpack("l", "foo", 10); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +try { + unpack("l", "foo", -1); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} ?> --EXPECT-- 0x01020304 0x05060708 0x01020304 0x05060708 +unpack(): Argument #3 ($offset) must be contained in argument #2 ($data) +unpack(): Argument #3 ($offset) must be contained in argument #2 ($data)