Re: svn: /php/php-src/trunk/ext/curl/tests/ bug48203.phpt bug48203_multi.phpt curl_file_deleted_before_curl_close.phpt

From: Date: Thu, 09 Jun 2011 07:32:11 +0000
Subject: Re: svn: /php/php-src/trunk/ext/curl/tests/ bug48203.phpt bug48203_multi.phpt curl_file_deleted_before_curl_close.phpt
References: 1  Groups: php.cvs 
Request: Send a blank email to php-cvs+get-65162@lists.php.net to get a copy of this message
Reopened bug and uploaded my patch here: http://bugs.php.net/bug.php?id=48203. 2011/6/9 Shein Alexey <shein@php.net>: > shein                                    Thu, 09 Jun 2011 07:16:13 +0000 > > Revision: > http://svn.php.net/viewvc?view=revision&revision=311959 > > Log: > Updated (currently failing) test for bug48203 with curl_stderr and added also curl_multi_exec > variant of this test. > > Bug: http://bugs.php.net/48203 (Closed) crash when > CURLOPT_STDERR is set to regular file > > Changed paths: >    U   php/php-src/trunk/ext/curl/tests/bug48203.phpt >    A + php/php-src/trunk/ext/curl/tests/bug48203_multi.phpt >        (from php/php-src/trunk/ext/curl/tests/bug48203.phpt:r311171) >    A   php/php-src/trunk/ext/curl/tests/curl_file_deleted_before_curl_close.phpt > > Modified: php/php-src/trunk/ext/curl/tests/bug48203.phpt > =================================================================== > --- php/php-src/trunk/ext/curl/tests/bug48203.phpt      2011-06-09 06:49:31 UTC (rev 311958) > +++ php/php-src/trunk/ext/curl/tests/bug48203.phpt      2011-06-09 07:16:13 UTC (rev 311959) > @@ -1,5 +1,5 @@ >  --TEST-- > -Bug #48203 (Crash when CURLOPT_STDERR is set to regular file) > +Bug #48203 (Crash when file pointers passed to curl are closed before calling curl_exec) >  --SKIPIF-- >  <?php >  if (!extension_loaded("curl")) { > @@ -12,22 +12,68 @@ >  --FILE-- >  <?php > > -$fp = fopen(dirname(__FILE__) . '/bug48203.tmp', 'w'); > +function checkForClosedFilePointer($curl_option, $description) { > +       $fp = fopen(dirname(__FILE__) . '/bug48203.tmp', 'w+'); > > -$ch = curl_init(); > +       $ch = curl_init(); > > -curl_setopt($ch, CURLOPT_VERBOSE, 1); > -curl_setopt($ch, CURLOPT_STDERR, $fp); > -curl_setopt($ch, CURLOPT_URL, ""); > +       // we also need CURLOPT_VERBOSE to be set to test CURLOPT_STDERR properly > +       if (CURLOPT_STDERR == $curl_option) { > +               curl_setopt($ch, CURLOPT_VERBOSE, 1); > +       } > > -fclose($fp); // <-- premature close of $fp caused a crash! > +    if (CURLOPT_INFILE == $curl_option) { > +        curl_setopt($ch, CURLOPT_UPLOAD, 1); > +    } > > -curl_exec($ch); > +       curl_setopt($ch, $curl_option, $fp); > + > +       curl_setopt($ch, CURLOPT_URL, 'localhost'); > +       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); > > -echo "Ok\n"; > +       fclose($fp); // <-- premature close of $fp caused a crash! > > +       curl_exec($ch); > + > +       curl_close($ch); > + > +       echo "Ok for $description\n"; > +} > + > +$options_to_check = array( > +       "CURLOPT_STDERR", > +    "CURLOPT_WRITEHEADER", > +    "CURLOPT_FILE", > +    "CURLOPT_INFILE" > +); > + > +foreach($options_to_check as $option) { > +       checkForClosedFilePointer(constant($option), $option); > +} > + >  ?> >  --CLEAN-- >  <?php @unlink(dirname(__FILE__) . '/bug48203.tmp'); ?> > ---EXPECT-- > -Ok > +--EXPECTF-- > +Warning: curl_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_exec(): CURLOPT_STDERR handle is incorrect in %s on line %d > +* About to connect() %a > +* Closing connection #%d > +Ok for CURLOPT_STDERR > + > +Warning: curl_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_exec(): CURLOPT_WRITEHEADER handle is incorrect in %s on line %d > +Ok for CURLOPT_WRITEHEADER > + > +Warning: curl_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_exec(): CURLOPT_FILE handle is incorrect in %s on line %d > +%a > +Ok for CURLOPT_FILE > + > +Warning: curl_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_exec(): CURLOPT_INFILE handle is incorrect in %s on line %d > +Ok for CURLOPT_INFILE > > Copied: php/php-src/trunk/ext/curl/tests/bug48203_multi.phpt (from rev 311171, > php/php-src/trunk/ext/curl/tests/bug48203.phpt) > =================================================================== > --- php/php-src/trunk/ext/curl/tests/bug48203_multi.phpt                           >      (rev 0) > +++ php/php-src/trunk/ext/curl/tests/bug48203_multi.phpt        2011-06-09 07:16:13 UTC > (rev 311959) > @@ -0,0 +1,106 @@ > +--TEST-- > +Variation of bug #48203 with curl_multi_exec (Crash when file pointers passed to curl are > closed before calling curl_multi_exec) > +--SKIPIF-- > +<?php > +if (!extension_loaded("curl")) { > +       exit("skip curl extension not loaded"); > +} > +if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  { > +       exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); > +} > +?> > +--FILE-- > +<?php > + > +function checkForClosedFilePointer($curl_option, $description) { > +       $fp = fopen(dirname(__FILE__) . '/bug48203.tmp', 'w'); > + > +       $ch1 = curl_init(); > +       $ch2 = curl_init(); > + > +       $options = array( > +               CURLOPT_RETURNTRANSFER => 1, > +               $curl_option => $fp, > +               CURLOPT_URL => getenv("PHP_CURL_HTTP_REMOTE_SERVER") > +       ); > + > +       // we also need to set CURLOPT_VERBOSE to test CURLOPT_STDERR properly > +       if (CURLOPT_STDERR == $curl_option) { > +               $options[CURLOPT_VERBOSE] = 1; > +       } > + > +       if (CURLOPT_INFILE == $curl_option) { > +           $options[CURLOPT_UPLOAD] = 1; > +       } > + > +       curl_setopt_array($ch1, $options); > +       curl_setopt_array($ch2, $options); > + > +       fclose($fp); // <-- premature close of $fp caused a crash! > + > +       $mh = curl_multi_init(); > + > +       curl_multi_add_handle($mh, $ch1); > +       curl_multi_add_handle($mh, $ch2); > + > +       $active = 0; > +       do { > +               curl_multi_exec($mh, $active); > +       } while ($active > 0); > + > +       curl_multi_remove_handle($mh, $ch1); > +       curl_multi_remove_handle($mh, $ch2); > +       curl_multi_close($mh); > + > +       echo "Ok for $description\n"; > +} > + > +$options_to_check = array( > +       "CURLOPT_STDERR", "CURLOPT_WRITEHEADER", > "CURLOPT_FILE", "CURLOPT_INFILE" > +); > + > +foreach($options_to_check as $option) { > +       checkForClosedFilePointer(constant($option), $option); > +} > + > +?> > +--CLEAN-- > +<?php @unlink(dirname(__FILE__) . '/bug48203.tmp'); ?> > +--EXPECTF-- > +Warning: curl_multi_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_multi_exec(): CURLOPT_STDERR handle is incorrect in %s on line %d > + > +Warning: curl_multi_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_multi_exec(): CURLOPT_STDERR handle is incorrect in %s on line %d > +%a > +Ok for CURLOPT_STDERR > + > +Warning: curl_multi_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_multi_exec(): CURLOPT_WRITEHEADER handle is incorrect in %s on line %d > + > +Warning: curl_multi_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_multi_exec(): CURLOPT_WRITEHEADER handle is incorrect in %s on line %d > +%AOk for CURLOPT_WRITEHEADER > + > +Warning: curl_multi_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_multi_exec(): CURLOPT_FILE handle is incorrect in %s on line %d > + > +Warning: curl_multi_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_multi_exec(): CURLOPT_FILE handle is incorrect in %s on line %d > +%a > +Ok for CURLOPT_FILE > + > +Warning: curl_multi_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_multi_exec(): CURLOPT_INFILE handle is incorrect in %s on line %d > + > +Warning: curl_multi_exec(): %d is not a valid stream resource in %s on line %d > + > +Warning: curl_multi_exec(): CURLOPT_INFILE handle is incorrect in %s on line %d > +Ok for CURLOPT_INFILE > > > Property changes on: php/php-src/trunk/ext/curl/tests/bug48203_multi.phpt > ___________________________________________________________________ > Added: cvs2svn:cvs-rev >   + 1.1.2.3 > Added: svn:keywords >   + Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL > Added: svn:eol-style >   + native > > Added: php/php-src/trunk/ext/curl/tests/curl_file_deleted_before_curl_close.phpt > =================================================================== > --- php/php-src/trunk/ext/curl/tests/curl_file_deleted_before_curl_close.phpt             >               (rev 0) > +++ php/php-src/trunk/ext/curl/tests/curl_file_deleted_before_curl_close.phpt   2011-06-09 > 07:16:13 UTC (rev 311959) > @@ -0,0 +1,37 @@ > +--TEST-- > +Memory corruption error if fp of just created file is closed before curl_close. > +--CREDITS-- > +Alexey Shein <confik@gmail.com> > +--SKIPIF-- > +<?php if (!extension_loaded("curl") || false === > getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?> > +--FILE-- > +<?php > + > +$ch = curl_init(getenv('PHP_CURL_HTTP_REMOTE_SERVER')); > + > +$temp_file = dirname(__FILE__) . '/curl_file_deleted_before_curl_close..tmp'; > +if (file_exists($temp_file)) { > +       unlink($temp_file); // file should not exist before test > +} > + > +$handle = fopen($temp_file, 'w'); > + > +curl_setopt($ch, CURLOPT_STDERR, $handle); > +curl_setopt($ch, CURLOPT_VERBOSE, 1); > +curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); > + > +curl_exec($ch); > + > +fclose($handle); // causes glibc memory error > + > +//unlink($temp_file); // uncomment to test segfault (file not found on iowrite.c) > + > +curl_close($ch); > +echo "Closed correctly\n"; > +?> > +--CLEAN-- > +<?php > +unlink(dirname(__FILE__) . '/curl_file_deleted_before_curl_close.tmp'); > +?> > +--EXPECTF-- > +Closed correctly > > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > -- Regards, Shein Alexey

« previous php.cvs (#65162) next »