Skip to content

Commit bc91602

Browse files
committed
add test, fix exception kind
1 parent f341646 commit bc91602

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

ext/gd/gd.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3689,21 +3689,21 @@ PHP_FUNCTION(imageaffine)
36893689
case IS_LONG:
36903690
affine[i] = Z_LVAL_P(zval_affine_elem);
36913691
if (ZEND_LONG_EXCEEDS_INT(affine[i])) {
3692-
zend_argument_type_error(2, "element %i must be between %d and %d", i, INT_MIN, INT_MAX);
3692+
zend_argument_value_error(2, "element %i must be between %d and %d", i, INT_MIN, INT_MAX);
36933693
RETURN_THROWS();
36943694
}
36953695
break;
36963696
case IS_DOUBLE:
36973697
affine[i] = Z_DVAL_P(zval_affine_elem);
36983698
if (ZEND_LONG_EXCEEDS_INT(affine[i])) {
3699-
zend_argument_type_error(2, "element %i must be between %d and %d", i, INT_MIN, INT_MAX);
3699+
zend_argument_value_error(2, "element %i must be between %d and %d", i, INT_MIN, INT_MAX);
37003700
RETURN_THROWS();
37013701
}
37023702
break;
37033703
case IS_STRING:
37043704
affine[i] = zval_get_double(zval_affine_elem);
37053705
if (ZEND_LONG_EXCEEDS_INT(affine[i])) {
3706-
zend_argument_type_error(2, "element %i must be between %d and %d", i, INT_MIN, INT_MAX);
3706+
zend_argument_value_error(2, "element %i must be between %d and %d", i, INT_MIN, INT_MAX);
37073707
RETURN_THROWS();
37083708
}
37093709
break;

ext/gd/tests/gh16322.phpt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--TEST--
2+
GH-16322 (imageaffine overflow/underflow on affine matrix)
3+
--EXTENSIONS--
4+
gd
5+
--INI--
6+
memory_limit=-1
7+
--FILE--
8+
<?php
9+
$matrix = [PHP_INT_MAX, 1, 1, 1, 1, 1];
10+
$src = imagecreatetruecolor(8, 8);
11+
12+
try {
13+
imageaffine($src, $matrix);
14+
} catch (\ValueError $e) {
15+
echo $e->getMessage() . PHP_EOL;
16+
}
17+
$matrix[0] = 1;
18+
$matrix[3] = PHP_INT_MIN;
19+
try {
20+
imageaffine($src, $matrix);
21+
} catch (\ValueError $e) {
22+
echo $e->getMessage();
23+
}
24+
?>
25+
--EXPECTF--
26+
imageaffine(): Argument #2 ($affine) element 0 must be between %s and %d
27+
imageaffine(): Argument #2 ($affine) element 3 must be between %s and %d

0 commit comments

Comments
 (0)