@@ -557,6 +557,8 @@ static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx)
557557 _php_curl_verify_handlers (ch , /* reporterror */ true);
558558 /* TODO Check callback returns an int or something castable to int */
559559 length = php_curl_get_long (& retval );
560+ } else if (EG (exception )) {
561+ length = -1 ;
560562 }
561563
562564 zval_ptr_dtor (& argv [0 ]);
@@ -606,7 +608,7 @@ static int curl_fnmatch(void *ctx, const char *pattern, const char *string)
606608static int curl_progress (void * clientp , double dltotal , double dlnow , double ultotal , double ulnow )
607609{
608610 php_curl * ch = (php_curl * )clientp ;
609- int rval = 0 ;
611+ int rval = 1 ;
610612
611613#if PHP_CURL_DEBUG
612614 fprintf (stderr , "curl_progress() called\n" );
@@ -633,8 +635,8 @@ static int curl_progress(void *clientp, double dltotal, double dlnow, double ult
633635 if (!Z_ISUNDEF (retval )) {
634636 _php_curl_verify_handlers (ch , /* reporterror */ true);
635637 /* TODO Check callback returns an int or something castable to int */
636- if (0 ! = php_curl_get_long (& retval )) {
637- rval = 1 ;
638+ if (0 = = php_curl_get_long (& retval )) {
639+ rval = 0 ;
638640 }
639641 }
640642
@@ -647,7 +649,7 @@ static int curl_progress(void *clientp, double dltotal, double dlnow, double ult
647649static int curl_xferinfo (void * clientp , curl_off_t dltotal , curl_off_t dlnow , curl_off_t ultotal , curl_off_t ulnow )
648650{
649651 php_curl * ch = (php_curl * )clientp ;
650- int rval = 0 ;
652+ int rval = 1 ;
651653
652654#if PHP_CURL_DEBUG
653655 fprintf (stderr , "curl_xferinfo() called\n" );
@@ -674,8 +676,8 @@ static int curl_xferinfo(void *clientp, curl_off_t dltotal, curl_off_t dlnow, cu
674676 if (!Z_ISUNDEF (retval )) {
675677 _php_curl_verify_handlers (ch , /* reporterror */ true);
676678 /* TODO Check callback returns an int or something castable to int */
677- if (0 ! = php_curl_get_long (& retval )) {
678- rval = 1 ;
679+ if (0 = = php_curl_get_long (& retval )) {
680+ rval = 0 ;
679681 }
680682 }
681683
@@ -688,13 +690,13 @@ static int curl_xferinfo(void *clientp, curl_off_t dltotal, curl_off_t dlnow, cu
688690static int curl_prereqfunction (void * clientp , char * conn_primary_ip , char * conn_local_ip , int conn_primary_port , int conn_local_port )
689691{
690692 php_curl * ch = (php_curl * )clientp ;
691- int rval = CURL_PREREQFUNC_OK ;
693+ int rval = CURL_PREREQFUNC_ABORT ;
692694
693695 // when CURLOPT_PREREQFUNCTION is set to null, curl_prereqfunction still
694696 // gets called. Return CURL_PREREQFUNC_OK immediately in this case to avoid
695697 // zend_call_known_fcc() with an uninitialized FCC.
696698 if (!ZEND_FCC_INITIALIZED (ch -> handlers .prereq )) {
697- return rval ;
699+ return CURL_PREREQFUNC_OK ;
698700 }
699701
700702#if PHP_CURL_DEBUG
@@ -823,6 +825,8 @@ static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx)
823825 }
824826 // TODO Do type error if invalid type?
825827 zval_ptr_dtor (& retval );
828+ } else if (EG (exception )) {
829+ length = CURL_READFUNC_ABORT ;
826830 }
827831
828832 zval_ptr_dtor (& argv [0 ]);
@@ -915,6 +919,8 @@ static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx
915919 // TODO: Check for valid int type for return value
916920 _php_curl_verify_handlers (ch , /* reporterror */ true);
917921 length = php_curl_get_long (& retval );
922+ } else if (EG (exception )) {
923+ length = -1 ;
918924 }
919925 zval_ptr_dtor (& argv [0 ]);
920926 zval_ptr_dtor (& argv [1 ]);
0 commit comments