@@ -3504,6 +3504,7 @@ PHP_FUNCTION(imagecrop)
3504
3504
gdRect rect ;
3505
3505
zval * z_rect ;
3506
3506
zval * tmp ;
3507
+ zend_long lval ;
3507
3508
3508
3509
if (zend_parse_parameters (ZEND_NUM_ARGS (), "Oa" , & IM , gd_image_ce , & z_rect ) == FAILURE ) {
3509
3510
RETURN_THROWS ();
@@ -3512,28 +3513,48 @@ PHP_FUNCTION(imagecrop)
3512
3513
im = php_gd_libgdimageptr_from_zval_p (IM );
3513
3514
3514
3515
if ((tmp = zend_hash_str_find (Z_ARRVAL_P (z_rect ), "x" , sizeof ("x" ) - 1 )) != NULL ) {
3515
- rect .x = zval_get_long (tmp );
3516
+ lval = zval_get_long (tmp );
3517
+ if (ZEND_LONG_EXCEEDS_INT (lval )) {
3518
+ zend_argument_value_error (2 , "invalid \"x\" key value" );
3519
+ RETURN_THROWS ();
3520
+ }
3521
+ rect .x = lval ;
3516
3522
} else {
3517
3523
zend_argument_value_error (2 , "must have an \"x\" key" );
3518
3524
RETURN_THROWS ();
3519
3525
}
3520
3526
3521
3527
if ((tmp = zend_hash_str_find (Z_ARRVAL_P (z_rect ), "y" , sizeof ("y" ) - 1 )) != NULL ) {
3522
- rect .y = zval_get_long (tmp );
3528
+ lval = zval_get_long (tmp );
3529
+ if (ZEND_LONG_EXCEEDS_INT (lval )) {
3530
+ zend_argument_value_error (2 , "invalid \"y\" key value" );
3531
+ RETURN_THROWS ();
3532
+ }
3533
+ rect .y = lval ;
3523
3534
} else {
3524
3535
zend_argument_value_error (2 , "must have a \"y\" key" );
3525
3536
RETURN_THROWS ();
3526
3537
}
3527
3538
3528
3539
if ((tmp = zend_hash_str_find (Z_ARRVAL_P (z_rect ), "width" , sizeof ("width" ) - 1 )) != NULL ) {
3529
- rect .width = zval_get_long (tmp );
3540
+ lval = zval_get_long (tmp );
3541
+ if (ZEND_LONG_EXCEEDS_INT (lval )) {
3542
+ zend_argument_value_error (2 , "invalid \"width\" key value" );
3543
+ RETURN_THROWS ();
3544
+ }
3545
+ rect .width = lval ;
3530
3546
} else {
3531
3547
zend_argument_value_error (2 , "must have a \"width\" key" );
3532
3548
RETURN_THROWS ();
3533
3549
}
3534
3550
3535
3551
if ((tmp = zend_hash_str_find (Z_ARRVAL_P (z_rect ), "height" , sizeof ("height" ) - 1 )) != NULL ) {
3536
- rect .height = zval_get_long (tmp );
3552
+ lval = zval_get_long (tmp );
3553
+ if (ZEND_LONG_EXCEEDS_INT (lval )) {
3554
+ zend_argument_value_error (2 , "invalid \"height\" key value" );
3555
+ RETURN_THROWS ();
3556
+ }
3557
+ rect .height = lval ;
3537
3558
} else {
3538
3559
zend_argument_value_error (2 , "must have a \"height\" key" );
3539
3560
RETURN_THROWS ();
@@ -3695,29 +3716,50 @@ PHP_FUNCTION(imageaffine)
3695
3716
}
3696
3717
3697
3718
if (z_rect != NULL ) {
3719
+ zend_long lval ;
3698
3720
if ((tmp = zend_hash_str_find (Z_ARRVAL_P (z_rect ), "x" , sizeof ("x" ) - 1 )) != NULL ) {
3699
- rect .x = zval_get_long (tmp );
3721
+ lval = zval_get_long (tmp );
3722
+ if (ZEND_LONG_EXCEEDS_INT (lval )) {
3723
+ zend_argument_value_error (3 , "invalid \"x\" key value" );
3724
+ RETURN_THROWS ();
3725
+ }
3726
+ rect .x = lval ;
3700
3727
} else {
3701
3728
zend_argument_value_error (3 , "must have an \"x\" key" );
3702
3729
RETURN_THROWS ();
3703
3730
}
3704
3731
3705
3732
if ((tmp = zend_hash_str_find (Z_ARRVAL_P (z_rect ), "y" , sizeof ("y" ) - 1 )) != NULL ) {
3706
- rect .y = zval_get_long (tmp );
3733
+ lval = zval_get_long (tmp );
3734
+ if (ZEND_LONG_EXCEEDS_INT (lval )) {
3735
+ zend_argument_value_error (3 , "invalid \"y\" key value" );
3736
+ RETURN_THROWS ();
3737
+ }
3738
+ rect .y = lval ;
3707
3739
} else {
3708
3740
zend_argument_value_error (3 , "must have a \"y\" key" );
3709
3741
RETURN_THROWS ();
3710
3742
}
3711
3743
3712
3744
if ((tmp = zend_hash_str_find (Z_ARRVAL_P (z_rect ), "width" , sizeof ("width" ) - 1 )) != NULL ) {
3713
- rect .width = zval_get_long (tmp );
3745
+ lval = zval_get_long (tmp );
3746
+ if (ZEND_LONG_EXCEEDS_INT (lval )) {
3747
+ zend_argument_value_error (3 , "invalid \"width\" key value" );
3748
+ RETURN_THROWS ();
3749
+ }
3750
+ rect .width = lval ;
3714
3751
} else {
3715
3752
zend_argument_value_error (3 , "must have a \"width\" key" );
3716
3753
RETURN_THROWS ();
3717
3754
}
3718
3755
3719
3756
if ((tmp = zend_hash_str_find (Z_ARRVAL_P (z_rect ), "height" , sizeof ("height" ) - 1 )) != NULL ) {
3720
- rect .height = zval_get_long (tmp );
3757
+ lval = zval_get_long (tmp );
3758
+ if (ZEND_LONG_EXCEEDS_INT (lval )) {
3759
+ zend_argument_value_error (3 , "invalid \"height\" key value" );
3760
+ RETURN_THROWS ();
3761
+ }
3762
+ rect .height = lval ;
3721
3763
} else {
3722
3764
zend_argument_value_error (3 , "must have a \"height\" key" );
3723
3765
RETURN_THROWS ();
0 commit comments