summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-09-22 14:00:48 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-09-22 14:13:26 +0200
commit048cc9ba78f740e4dcd400f372b9ca2876a26117 (patch)
tree9386301838df96d5ec3b8d7f6d9f101b085deba6
parentd893404fb9e56ec2ac7ebb04b26eb47a566ff2d2 (diff)
downloadphp-git-048cc9ba78f740e4dcd400f372b9ca2876a26117.tar.gz
Convert unpack offset warning to ValueError
-rw-r--r--ext/standard/pack.c5
-rw-r--r--ext/standard/tests/strings/unpack_offset.phpt13
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)