diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-09-22 14:00:48 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-09-22 14:13:26 +0200 |
commit | 048cc9ba78f740e4dcd400f372b9ca2876a26117 (patch) | |
tree | 9386301838df96d5ec3b8d7f6d9f101b085deba6 | |
parent | d893404fb9e56ec2ac7ebb04b26eb47a566ff2d2 (diff) | |
download | php-git-048cc9ba78f740e4dcd400f372b9ca2876a26117.tar.gz |
Convert unpack offset warning to ValueError
-rw-r--r-- | ext/standard/pack.c | 5 | ||||
-rw-r--r-- | 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 013173dc73..bbae59c6ae 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 451dd36724..bd787859c1 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) |