@@ -623,7 +623,7 @@ static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx)
623
623
length = -1 ;
624
624
} else if (!Z_ISUNDEF (retval )) {
625
625
_php_curl_verify_handlers (ch , /* reporterror */ true);
626
- length = zval_get_long (& retval );
626
+ length = php_curl_get_long (& retval );
627
627
}
628
628
629
629
zval_ptr_dtor (& argv [0 ]);
@@ -667,7 +667,7 @@ static int curl_fnmatch(void *ctx, const char *pattern, const char *string)
667
667
php_error_docref (NULL , E_WARNING , "Cannot call the CURLOPT_FNMATCH_FUNCTION" );
668
668
} else if (!Z_ISUNDEF (retval )) {
669
669
_php_curl_verify_handlers (ch , /* reporterror */ true);
670
- rval = zval_get_long (& retval );
670
+ rval = php_curl_get_long (& retval );
671
671
}
672
672
zval_ptr_dtor (& argv [0 ]);
673
673
zval_ptr_dtor (& argv [1 ]);
@@ -715,7 +715,7 @@ static size_t curl_progress(void *clientp, double dltotal, double dlnow, double
715
715
php_error_docref (NULL , E_WARNING , "Cannot call the CURLOPT_PROGRESSFUNCTION" );
716
716
} else if (!Z_ISUNDEF (retval )) {
717
717
_php_curl_verify_handlers (ch , /* reporterror */ true);
718
- if (0 != zval_get_long (& retval )) {
718
+ if (0 != php_curl_get_long (& retval )) {
719
719
rval = 1 ;
720
720
}
721
721
}
@@ -764,7 +764,7 @@ static size_t curl_xferinfo(void *clientp, curl_off_t dltotal, curl_off_t dlnow,
764
764
php_error_docref (NULL , E_WARNING , "Cannot call the CURLOPT_XFERINFOFUNCTION" );
765
765
} else if (!Z_ISUNDEF (retval )) {
766
766
_php_curl_verify_handlers (ch , /* reporterror */ true);
767
- if (0 != zval_get_long (& retval )) {
767
+ if (0 != php_curl_get_long (& retval )) {
768
768
rval = 1 ;
769
769
}
770
770
}
@@ -821,6 +821,7 @@ static int curl_ssh_hostkeyfunction(void *clientp, int keytype, const char *key,
821
821
}
822
822
} else {
823
823
zend_throw_error (NULL , "The CURLOPT_SSH_HOSTKEYFUNCTION callback must return either CURLKHMATCH_OK or CURLKHMATCH_MISMATCH" );
824
+ zval_ptr_dtor (& retval );
824
825
}
825
826
}
826
827
zval_ptr_dtor (& argv [0 ]);
@@ -938,7 +939,7 @@ static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx
938
939
length = -1 ;
939
940
} else if (!Z_ISUNDEF (retval )) {
940
941
_php_curl_verify_handlers (ch , /* reporterror */ true);
941
- length = zval_get_long (& retval );
942
+ length = php_curl_get_long (& retval );
942
943
}
943
944
zval_ptr_dtor (& argv [0 ]);
944
945
zval_ptr_dtor (& argv [1 ]);
@@ -1290,6 +1291,17 @@ void _php_setup_easy_copy_handlers(php_curl *ch, php_curl *source)
1290
1291
(* source -> clone )++ ;
1291
1292
}
1292
1293
1294
+ zend_long php_curl_get_long (zval * zv )
1295
+ {
1296
+ if (EXPECTED (Z_TYPE_P (zv ) == IS_LONG )) {
1297
+ return Z_LVAL_P (zv );
1298
+ } else {
1299
+ zend_long ret = zval_get_long (zv );
1300
+ zval_ptr_dtor (zv );
1301
+ return ret ;
1302
+ }
1303
+ }
1304
+
1293
1305
#if LIBCURL_VERSION_NUM >= 0x073800 /* 7.56.0 */
1294
1306
static size_t read_cb (char * buffer , size_t size , size_t nitems , void * arg ) /* {{{ */
1295
1307
{
0 commit comments