iliaa Fri Mar 12 12:31:10 2004 EDT
Modified files:
/php-src/ext/curl interface.c
Log:
Additional checks of return values from user callback functions.
http://cvs.php.net/diff.php/php-src/ext/curl/interface.c?r1=1.38&r2=1.39&ty=u
Index: php-src/ext/curl/interface.c
diff -u php-src/ext/curl/interface.c:1.38 php-src/ext/curl/interface.c:1.39
--- php-src/ext/curl/interface.c:1.38 Fri Mar 12 11:36:30 2004
+++ php-src/ext/curl/interface.c Fri Mar 12 12:31:10 2004
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: interface.c,v 1.38 2004/03/12 16:36:30 sterling Exp $ */
+/* $Id: interface.c,v 1.39 2004/03/12 17:31:10 iliaa Exp $ */
#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
@@ -433,6 +433,9 @@
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not
call the CURLOPT_WRITEFUNCTION");
length = -1;
} else {
+ if (Z_TYPE_P(retval_ptr) != IS_LONG) {
+ convert_to_long_ex(&retval_ptr);
+ }
length = Z_LVAL_P(retval_ptr);
}
@@ -500,8 +503,8 @@
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot
call the CURLOPT_READFUNCTION");
} else {
if (Z_TYPE_P(retval_ptr) == IS_STRING) {
- memcpy(data, Z_STRVAL_P(retval_ptr), size *
nmemb);
- length = Z_STRLEN_P(retval_ptr);
+ length = MIN(size * nmemb,
Z_STRLEN_P(retval_ptr));
+ memcpy(data, Z_STRVAL_P(retval_ptr), length);
}
}
@@ -571,6 +574,9 @@
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not
call the CURLOPT_HEADERFUNCTION");
length = -1;
} else {
+ if (Z_TYPE_P(retval_ptr) != IS_LONG) {
+ convert_to_long_ex(&retval_ptr);
+ }
length = Z_LVAL_P(retval_ptr);
}
zval_ptr_dtor(argv[0]);
@@ -578,8 +584,12 @@
zval_ptr_dtor(&retval_ptr);
break;
}
+
case PHP_CURL_IGNORE:
return length;
+
+ default:
+ return -1;
}
return length;
@@ -595,7 +605,7 @@
zval *argv[3];
zval *retval = NULL;
int error;
- int ret = 0;
+ int ret = -1;
TSRMLS_FETCH_FROM_CTX(ch->thread_ctx);
MAKE_STD_ZVAL(argv[0]);
@@ -610,13 +620,15 @@
error = call_user_function(EG(function_table), NULL, func, retval, 2, argv
TSRMLS_CC);
if (error == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the
CURLOPT_PASSWDFUNCTION");
- ret = -1;
} else {
- if (Z_STRLEN_P(retval) > buflen) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Returned password
is too long for libcurl to handle");
- ret = -1;
+ if (Z_TYPE_P(retval) != IS_STRING) {
+ if (Z_STRLEN_P(retval) > buflen) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Returned
password is too long for libcurl to handle");
+ } else {
+ strlcpy(buf, Z_STRVAL_P(retval), Z_STRLEN_P(retval));
+ }
} else {
- strlcpy(buf, Z_STRVAL_P(retval), buflen);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "User handler '%s'
did not return a string.", Z_STRVAL_P(func));
}
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php