Simplify parsing of affine matrix arguments (GH-17094)

This code repetition is prone to errors and makes the code harder to
read than necessary.  We simplify at the cost of making parsing of ints
slightly less performant (what should not really matter in practice).
This commit is contained in:
Christoph M. Becker 2024-12-10 16:08:27 +01:00 committed by GitHub
parent 85f69a7a3f
commit a7785e8edf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -4017,19 +4017,7 @@ PHP_FUNCTION(imageaffine)
if ((zval_affine_elem = zend_hash_index_find(Z_ARRVAL_P(z_affine), i)) != NULL) { if ((zval_affine_elem = zend_hash_index_find(Z_ARRVAL_P(z_affine), i)) != NULL) {
switch (Z_TYPE_P(zval_affine_elem)) { switch (Z_TYPE_P(zval_affine_elem)) {
case IS_LONG: case IS_LONG:
affine[i] = Z_LVAL_P(zval_affine_elem);
if (affine[i] < INT_MIN || affine[i] > INT_MAX) {
zend_argument_value_error(2, "element %i must be between %d and %d", i, INT_MIN, INT_MAX);
RETURN_THROWS();
}
break;
case IS_DOUBLE: case IS_DOUBLE:
affine[i] = Z_DVAL_P(zval_affine_elem);
if (affine[i] < INT_MIN || affine[i] > INT_MAX) {
zend_argument_value_error(2, "element %i must be between %d and %d", i, INT_MIN, INT_MAX);
RETURN_THROWS();
}
break;
case IS_STRING: case IS_STRING:
affine[i] = zval_get_double(zval_affine_elem); affine[i] = zval_get_double(zval_affine_elem);
if (affine[i] < INT_MIN || affine[i] > INT_MAX) { if (affine[i] < INT_MIN || affine[i] > INT_MAX) {
@ -4195,11 +4183,7 @@ PHP_FUNCTION(imageaffinematrixconcat)
if ((tmp = zend_hash_index_find(Z_ARRVAL_P(z_m1), i)) != NULL) { if ((tmp = zend_hash_index_find(Z_ARRVAL_P(z_m1), i)) != NULL) {
switch (Z_TYPE_P(tmp)) { switch (Z_TYPE_P(tmp)) {
case IS_LONG: case IS_LONG:
m1[i] = Z_LVAL_P(tmp);
break;
case IS_DOUBLE: case IS_DOUBLE:
m1[i] = Z_DVAL_P(tmp);
break;
case IS_STRING: case IS_STRING:
m1[i] = zval_get_double(tmp); m1[i] = zval_get_double(tmp);
break; break;
@ -4212,11 +4196,7 @@ PHP_FUNCTION(imageaffinematrixconcat)
if ((tmp = zend_hash_index_find(Z_ARRVAL_P(z_m2), i)) != NULL) { if ((tmp = zend_hash_index_find(Z_ARRVAL_P(z_m2), i)) != NULL) {
switch (Z_TYPE_P(tmp)) { switch (Z_TYPE_P(tmp)) {
case IS_LONG: case IS_LONG:
m2[i] = Z_LVAL_P(tmp);
break;
case IS_DOUBLE: case IS_DOUBLE:
m2[i] = Z_DVAL_P(tmp);
break;
case IS_STRING: case IS_STRING:
m2[i] = zval_get_double(tmp); m2[i] = zval_get_double(tmp);
break; break;