#45220 [Opn]: curl_read callback returns -1 when needs to return size_t (unsigned)

2008-06-16 Thread brockn at gmail dot com
 ID:   45220
 User updated by:  brockn at gmail dot com
 Reported By:  brockn at gmail dot com
 Status:   Open
 Bug Type: cURL related
 Operating System: CentOS release 4.6 (Final)
 PHP Version:  5.2.6
 New Comment:

Yes, if you set POSTFIELDS to , then curl_read does not return -1.
The root of the problem is that the default return value is -1, when it
should be 0 as it returns a size_t which is an unsigned type.

A check was added in libcurl 7.18 where the value is cast to size_t and
compared. This is the ``effect'' of the problem, but the cause is that
the php supplied curl_read callback is returning -1.


Previous Comments:


[2008-06-16 17:25:25] randearievilo at gmail dot com

I have a similar code using cURL that worked fine in two platforms, but
failed on other two.

Platforms working:
- Debian 4.0 / PHP 5.2.0 / Apache 2.2.8 / libcurl 7.15.5
- Windows XP / PHP 4.4.7 / Apache 1.3.39 / libcurl 7.16.0

Platforms not working:
- Linux / PHP 4.4.7 / Apache 1.3.41 / libcurl 7.18.1
- Linux / PHP 5.2.5 / Apache 1.3.41 / libcurl 7.18.1

As you can see, the libcurl 7.18.x may really have a
bug/error/problem.
I think there was a change in the option CURLOPT_POST. Now, to use this
option, it seems to be necessary to set the option CURLOPT_POSTFIELDS
(curl_setopt($ch, CURLOPT_POSTFIELDS, );).



[2008-06-09 19:07:32] brockn at gmail dot com

Here are the details of the problem which occurs inside libcurl:

http://curl.haxx.se/mail/lib-2008-06/0109.html
http://curl.haxx.se/mail/lib-2008-06/0111.html
http://curl.haxx.se/mail/lib-2008-06/0123.html



[2008-06-09 17:17:46] brockn at gmail dot com

Description:

curl_read, can return -1 when it explicitly states its return size_t.
This causes curl versions = 7.18.X to fail with the attached code.

Curl stores the callback return value as int, but casts it to a size_t
to do a check. This causes the value to become very large and thus the
check fails when it should not.

I tried to download a snapshot and check that out, but the site appears
to be down.

Reproduce code:
---
?php
$host= 'http://bashcurescancer.com/dump-request-variable.php';
$CR = curl_init();
curl_setopt($CR, CURLOPT_TIMEOUT, 60);
curl_setopt($CR, CURLOPT_URL, $host);
curl_setopt($CR, CURLOPT_POST, 1);
curl_setopt($CR, CURLOPT_FAILONERROR, true);
curl_setopt($CR, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($CR, CURLOPT_SSL_VERIFYPEER, 0);
$body = curl_exec( $CR );
$error = curl_error( $CR );
if( !empty( $error )) {
print(FAIL: $error\n);
exit(1);
} else {
print(PASS:  . trim($body) . \n);
curl_close($CR);
exit(0);
}
?


Expected result:

PASS: array (

)

Actual result:
--
FAIL: Failed to open/read local data from file/application






-- 
Edit this bug report at http://bugs.php.net/?id=45220edit=1



#45220 [Opn]: curl_read callback returns -1 when needs to return size_t (unsigned)

2008-06-09 Thread brockn at gmail dot com
 ID:   45220
 User updated by:  brockn at gmail dot com
 Reported By:  brockn at gmail dot com
 Status:   Open
 Bug Type: cURL related
 Operating System: CentOS release 4.6 (Final)
 PHP Version:  5.2.6
 New Comment:

Here are the details of the problem which occurs inside libcurl:

http://curl.haxx.se/mail/lib-2008-06/0109.html
http://curl.haxx.se/mail/lib-2008-06/0111.html
http://curl.haxx.se/mail/lib-2008-06/0123.html


Previous Comments:


[2008-06-09 17:17:46] brockn at gmail dot com

Description:

curl_read, can return -1 when it explicitly states its return size_t.
This causes curl versions = 7.18.X to fail with the attached code.

Curl stores the callback return value as int, but casts it to a size_t
to do a check. This causes the value to become very large and thus the
check fails when it should not.

I tried to download a snapshot and check that out, but the site appears
to be down.

Reproduce code:
---
?php
$host= 'http://bashcurescancer.com/dump-request-variable.php';
$CR = curl_init();
curl_setopt($CR, CURLOPT_TIMEOUT, 60);
curl_setopt($CR, CURLOPT_URL, $host);
curl_setopt($CR, CURLOPT_POST, 1);
curl_setopt($CR, CURLOPT_FAILONERROR, true);
curl_setopt($CR, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($CR, CURLOPT_SSL_VERIFYPEER, 0);
$body = curl_exec( $CR );
$error = curl_error( $CR );
if( !empty( $error )) {
print(FAIL: $error\n);
exit(1);
} else {
print(PASS:  . trim($body) . \n);
curl_close($CR);
exit(0);
}
?


Expected result:

PASS: array (

)

Actual result:
--
FAIL: Failed to open/read local data from file/application






-- 
Edit this bug report at http://bugs.php.net/?id=45220edit=1