Annotation of embedaddon/php/ext/curl/tests/bug48203_multi.phpt, revision 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>