@@ -554,6 +554,8 @@ static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx)
554554 _php_curl_verify_handlers (ch , /* reporterror */ true);
555555 /* TODO Check callback returns an int or something castable to int */
556556 length = php_curl_get_long (& retval );
557+ } else if (EG (exception )) {
558+ length = -1 ;
557559 }
558560
559561 zval_ptr_dtor (& argv [0 ]);
@@ -603,7 +605,7 @@ static int curl_fnmatch(void *ctx, const char *pattern, const char *string)
603605static int curl_progress (void * clientp , double dltotal , double dlnow , double ultotal , double ulnow )
604606{
605607 php_curl * ch = (php_curl * )clientp ;
606- int rval = 0 ;
608+ int rval = 1 ;
607609
608610#if PHP_CURL_DEBUG
609611 fprintf (stderr , "curl_progress() called\n" );
@@ -630,8 +632,8 @@ static int curl_progress(void *clientp, double dltotal, double dlnow, double ult
630632 if (!Z_ISUNDEF (retval )) {
631633 _php_curl_verify_handlers (ch , /* reporterror */ true);
632634 /* TODO Check callback returns an int or something castable to int */
633- if (0 ! = php_curl_get_long (& retval )) {
634- rval = 1 ;
635+ if (0 = = php_curl_get_long (& retval )) {
636+ rval = 0 ;
635637 }
636638 }
637639
@@ -644,7 +646,7 @@ static int curl_progress(void *clientp, double dltotal, double dlnow, double ult
644646static int curl_xferinfo (void * clientp , curl_off_t dltotal , curl_off_t dlnow , curl_off_t ultotal , curl_off_t ulnow )
645647{
646648 php_curl * ch = (php_curl * )clientp ;
647- int rval = 0 ;
649+ int rval = 1 ;
648650
649651#if PHP_CURL_DEBUG
650652 fprintf (stderr , "curl_xferinfo() called\n" );
@@ -671,8 +673,8 @@ static int curl_xferinfo(void *clientp, curl_off_t dltotal, curl_off_t dlnow, cu
671673 if (!Z_ISUNDEF (retval )) {
672674 _php_curl_verify_handlers (ch , /* reporterror */ true);
673675 /* TODO Check callback returns an int or something castable to int */
674- if (0 ! = php_curl_get_long (& retval )) {
675- rval = 1 ;
676+ if (0 = = php_curl_get_long (& retval )) {
677+ rval = 0 ;
676678 }
677679 }
678680
@@ -685,13 +687,13 @@ static int curl_xferinfo(void *clientp, curl_off_t dltotal, curl_off_t dlnow, cu
685687static int curl_prereqfunction (void * clientp , char * conn_primary_ip , char * conn_local_ip , int conn_primary_port , int conn_local_port )
686688{
687689 php_curl * ch = (php_curl * )clientp ;
688- int rval = CURL_PREREQFUNC_OK ;
690+ int rval = CURL_PREREQFUNC_ABORT ;
689691
690692 // when CURLOPT_PREREQFUNCTION is set to null, curl_prereqfunction still
691693 // gets called. Return CURL_PREREQFUNC_OK immediately in this case to avoid
692694 // zend_call_known_fcc() with an uninitialized FCC.
693695 if (!ZEND_FCC_INITIALIZED (ch -> handlers .prereq )) {
694- return rval ;
696+ return CURL_PREREQFUNC_OK ;
695697 }
696698
697699#if PHP_CURL_DEBUG
@@ -822,6 +824,8 @@ static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx)
822824 }
823825 // TODO Do type error if invalid type?
824826 zval_ptr_dtor (& retval );
827+ } else if (EG (exception )) {
828+ length = CURL_READFUNC_ABORT ;
825829 }
826830
827831 zval_ptr_dtor (& argv [0 ]);
@@ -916,6 +920,8 @@ static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx
916920 // TODO: Check for valid int type for return value
917921 _php_curl_verify_handlers (ch , /* reporterror */ true);
918922 length = php_curl_get_long (& retval );
923+ } else if (EG (exception )) {
924+ length = -1 ;
919925 }
920926 zval_ptr_dtor (& argv [0 ]);
921927 zval_ptr_dtor (& argv [1 ]);
0 commit comments