Annotation of embedaddon/php/ext/curl/tests/bug48203_multi.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: Variation of bug #48203 with curl_multi_exec (Crash when file pointers passed to curl are closed before calling curl_multi_exec)
                      3: --SKIPIF--
                      4: <?php
                      5: if (!extension_loaded("curl")) {
                      6:        exit("skip curl extension not loaded");
                      7: }
                      8: if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  {
                      9:        exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
                     10: }
                     11: ?>
                     12: --FILE--
                     13: <?php
                     14: 
                     15: function checkForClosedFilePointer($curl_option, $description) {
                     16:        $fp = fopen(dirname(__FILE__) . '/bug48203.tmp', 'w');
                     17: 
                     18:        $ch1 = curl_init();
                     19:        $ch2 = curl_init();
                     20: 
                     21:        $options = array(
                     22:                CURLOPT_RETURNTRANSFER => 1,
                     23:                $curl_option => $fp,
                     24:                CURLOPT_URL => getenv("PHP_CURL_HTTP_REMOTE_SERVER")
                     25:        );
                     26: 
                     27:        // we also need to set CURLOPT_VERBOSE to test CURLOPT_STDERR properly
                     28:        if (CURLOPT_STDERR == $curl_option) {
                     29:                $options[CURLOPT_VERBOSE] = 1;
                     30:        }
                     31: 
                     32:        if (CURLOPT_INFILE == $curl_option) {
                     33:            $options[CURLOPT_UPLOAD] = 1;
                     34:        }
                     35: 
                     36:        curl_setopt_array($ch1, $options);
                     37:        curl_setopt_array($ch2, $options);
                     38: 
                     39:        fclose($fp); // <-- premature close of $fp caused a crash!
                     40: 
                     41:        $mh = curl_multi_init();
                     42: 
                     43:        curl_multi_add_handle($mh, $ch1);
                     44:        curl_multi_add_handle($mh, $ch2);
                     45: 
                     46:        $active = 0;
                     47:        do {
                     48:                curl_multi_exec($mh, $active);
                     49:        } while ($active > 0);
                     50: 
                     51:        curl_multi_remove_handle($mh, $ch1);
                     52:        curl_multi_remove_handle($mh, $ch2);
                     53:        curl_multi_close($mh);
                     54: 
                     55:        echo "Ok for $description\n";
                     56: }
                     57: 
                     58: $options_to_check = array(
                     59:        "CURLOPT_STDERR", "CURLOPT_WRITEHEADER", "CURLOPT_FILE", "CURLOPT_INFILE"
                     60: );
                     61: 
                     62: foreach($options_to_check as $option) {
                     63:        checkForClosedFilePointer(constant($option), $option);
                     64: }
                     65: 
                     66: ?>
                     67: --CLEAN--
                     68: <?php @unlink(dirname(__FILE__) . '/bug48203.tmp'); ?>
                     69: --EXPECTF--
                     70: Warning: curl_multi_exec(): CURLOPT_STDERR resource has gone away, resetting to stderr in %sbug48203_multi.php on line 36
                     71: 
                     72: Warning: curl_multi_exec(): CURLOPT_STDERR resource has gone away, resetting to stderr in %sbug48203_multi.php on line 36
                     73: %A
                     74: Ok for CURLOPT_STDERR
                     75: %A
                     76: Warning: curl_multi_exec(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %sbug48203_multi.php on line 36
                     77: 
                     78: Warning: curl_multi_exec(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %sbug48203_multi.php on line 36
                     79: Ok for CURLOPT_WRITEHEADER
                     80: 
                     81: Warning: curl_multi_exec(): CURLOPT_FILE resource has gone away, resetting to default in %sbug48203_multi.php on line 36
                     82: 
                     83: Warning: curl_multi_exec(): CURLOPT_FILE resource has gone away, resetting to default in %sbug48203_multi.php on line 36
                     84: %A
                     85: Ok for CURLOPT_FILE
                     86: 
                     87: Warning: curl_multi_exec(): CURLOPT_INFILE resource has gone away, resetting to default in %sbug48203_multi.php on line 36
                     88: 
                     89: Warning: curl_multi_exec(): CURLOPT_INFILE resource has gone away, resetting to default in %sbug48203_multi.php on line 36
                     90: Ok for CURLOPT_INFILE

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>