Skip to content

Commit 0511426

Browse files
committed
Fix GH-16322: overflow on imageaffine matrix argument.
1 parent 1ee56bd commit 0511426

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

ext/gd/gd.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3687,13 +3687,25 @@ PHP_FUNCTION(imageaffine)
36873687
if ((zval_affine_elem = zend_hash_index_find(Z_ARRVAL_P(z_affine), i)) != NULL) {
36883688
switch (Z_TYPE_P(zval_affine_elem)) {
36893689
case IS_LONG:
3690-
affine[i] = Z_LVAL_P(zval_affine_elem);
3690+
affine[i] = Z_LVAL_P(zval_affine_elem);
3691+
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);
3693+
RETURN_THROWS();
3694+
}
36913695
break;
36923696
case IS_DOUBLE:
36933697
affine[i] = Z_DVAL_P(zval_affine_elem);
3698+
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);
3700+
RETURN_THROWS();
3701+
}
36943702
break;
36953703
case IS_STRING:
36963704
affine[i] = zval_get_double(zval_affine_elem);
3705+
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);
3707+
RETURN_THROWS();
3708+
}
36973709
break;
36983710
default:
36993711
zend_argument_type_error(3, "contains invalid type for element %i", i);

0 commit comments

Comments
 (0)