Hi,

    while pondering around with #17185 I came about this little
    issue here (trying to readfile an url which doesn't exist):

    Given:
    <?
        error_reporting(E_ALL);

        $foo = readfile("http://guru.josefine.at/messanottaexist";);
        var_dump($foo);
    ?>

    HEAD compiled with debug:

Warning: HTTP request failed! HTTP/1.1 404 Not Found
 in readfile.php on line 4
readfile.php(4) : Warning - HTTP request failed! HTTP/1.1 404 Not Found


Warning: readfile("http://guru.josefine.at/woho";) - Success in readfile.php on line 4
readfile.php(4) : Warning - readfile("http://guru.josefine.at/woho";) - Success
bool(false)
/home/mfischer/isrc/cvs/php4/Zend/zend_hash.c(406) :  Freeing 0x082269A4 (35 bytes), 
script=-
Last leak repeated 4 times
/home/mfischer/isrc/cvs/php4/ext/standard/http_fopen_wrapper.c(268) :  Freeing 
0x08226944 (44 bytes), script=-
Last leak repeated 3 times
/home/mfischer/isrc/cvs/php4/ext/standard/http_fopen_wrapper.c(266) :  Freeing 
0x08226904 (12 bytes), script=-
Last leak repeated 3 times
/home/mfischer/isrc/cvs/php4/ext/standard/http_fopen_wrapper.c(212) :  Freeing 
0x082261E4 (25 bytes), script=-
/home/mfischer/isrc/cvs/php4/Zend/zend_hash.c(178) :  Freeing 0x0822885C (32 bytes), 
script=-
/home/mfischer/isrc/cvs/php4/ext/standard/http_fopen_wrapper.c(186) :  Freeing 
0x08228554 (44 bytes), script=-
/home/mfischer/isrc/cvs/php4/Zend/zend_API.c(565) : Actual location (location was 
relayed)
/home/mfischer/isrc/cvs/php4/ext/standard/http_fopen_wrapper.c(185) :  Freeing 
0x0822915C (12 bytes), script=-
/home/mfischer/isrc/cvs/php4/ext/standard/http_fopen_wrapper.c(195) :  Freeing 
0x0822892C (12 bytes), script=-

    Two things puzzling me here:

    1) The phrase success;

        Warning: readfile("http://guru.josefine.at/woho";) - Success in readfile.php on 
line 4

    2) The memory leaks obviously :-)


    No idea what's wrong with 2) but regarding to 1) I've a few
    remarks. In php4/main/streams.c around 1340 we have:

    if (stream == NULL && (options & REPORT_ERRORS)) {
        char *tmp = estrdup(path);
        char *msg;

        if (wrapper)
            msg = strerror(errno); // MARK 1
        else
            msg = "no suitable wrapper could be found";

        php_strip_url_passwd(tmp);
        zend_error(E_WARNING, "%s(\"%s\") - %s", get_active_function_name(TSRMLS_C), 
tmp, msg);
        efree(tmp);
    }
    return stream;

    The line I've marked with 'MARK 1' results in the 'Success'
    phrase because errno is just zero. And as far as I could see
    in php4/ext/standard/http_fopen_wrapper.c errrno is never set
    to any kind of error value. It doesn't nmake much sense
    anyway because it's an HTTP error, nothing which is covered
    with any of the system error messages. I think we should seek
    for another solution here (stream-dependant error handling?)

    Also the error output looks confusing, becuse the bug is
    reported twice:

Warning: HTTP request failed! HTTP/1.1 404 Not Found
 in readfile.php on line 4
readfile.php(4) : Warning - HTTP request failed! HTTP/1.1 404 Not Found

    and then

Warning: readfile("http://guru.josefine.at/woho";) - Success in readfile.php on line 4
readfile.php(4) : Warning - readfile("http://guru.josefine.at/woho";) - Success

    The former one is generated by php_stream_url_wrap_http
    itself, the latter by _php_stream_open_wrapper_ex.

    Despite this, awesome work Wez did here!

    regards,

        - Markus

-- 
Please always Cc to me when replying to me on the lists.
GnuPG Key: http://guru.josefine.at/~mfischer/C2272BD0.asc
---------------------------------------------------------
"I mean "When in doubt, blame mcrypt" is more often right than wrong :)"
"Always right, never wrong :)"
- Two PHP developers who want to remain unnamed

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to