Hi:
   this fix should be a  suboptimal fix,  the problem is for static
file,  builtin server bypass the sapi_activate (in the
send_error_page),  call sapi_activate_header_only instead.

   then when it call the sapi_deactivate, crashed.

   I have tried to make a optimize fix , but failed.

   I will have another try later, in this weekend maybe.

thanks.

On Fri, Dec 9, 2011 at 1:37 PM, Xinchen Hui <larue...@php.net> wrote:
> laruence                                 Fri, 09 Dec 2011 05:37:41 +0000
>
> Revision: http://svn.php.net/viewvc?view=revision&revision=320716
>
> Log:
> Fixed bug #60477 (Segfault after two multipart/form-data POST requests)
>
> Bug: https://bugs.php.net/60477 (Assigned) Segfault after two 
> multipart/form-data POST requestes, one 200 RQ and one 404
>
> Changed paths:
>    U   php/php-src/branches/PHP_5_4/NEWS
>    U   php/php-src/branches/PHP_5_4/sapi/cli/php_cli_server.c
>    A   php/php-src/branches/PHP_5_4/sapi/cli/tests/php_cli_server_014.phpt
>    U   php/php-src/trunk/sapi/cli/php_cli_server.c
>    A   php/php-src/trunk/sapi/cli/tests/php_cli_server_014.phpt
>
> Modified: php/php-src/branches/PHP_5_4/NEWS
> ===================================================================
> --- php/php-src/branches/PHP_5_4/NEWS   2011-12-09 05:25:05 UTC (rev 320715)
> +++ php/php-src/branches/PHP_5_4/NEWS   2011-12-09 05:37:41 UTC (rev 320716)
> @@ -1,6 +1,9 @@
>  PHP                                                                        
> NEWS
>  |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
>  ?? Dec 2011, PHP 5.4.0 RC4
> +- CLI SAPI:
> +  . Fixed bug #60477 (Segfault after two multipart/form-data POST requests).
> +    (Laruence)
>
>  08 Dec 2011, PHP 5.4.0 RC3
>  - Core:
>
> Modified: php/php-src/branches/PHP_5_4/sapi/cli/php_cli_server.c
> ===================================================================
> --- php/php-src/branches/PHP_5_4/sapi/cli/php_cli_server.c      2011-12-09 
> 05:25:05 UTC (rev 320715)
> +++ php/php-src/branches/PHP_5_4/sapi/cli/php_cli_server.c      2011-12-09 
> 05:37:41 UTC (rev 320716)
> @@ -1921,6 +1921,7 @@
>        php_cli_server_close_connection(server, client TSRMLS_CC);
>        destroy_request_info(&SG(request_info));
>        SG(server_context) = NULL;
> +       SG(rfc1867_uploaded_files) = NULL;
>        return SUCCESS;
>  }
>  /* }}} */
>
> Added: php/php-src/branches/PHP_5_4/sapi/cli/tests/php_cli_server_014.phpt
> ===================================================================
> --- php/php-src/branches/PHP_5_4/sapi/cli/tests/php_cli_server_014.phpt       
>                   (rev 0)
> +++ php/php-src/branches/PHP_5_4/sapi/cli/tests/php_cli_server_014.phpt 
> 2011-12-09 05:37:41 UTC (rev 320716)
> @@ -0,0 +1,76 @@
> +--TEST--
> +Bug #60477: Segfault after two multipart/form-data POST requestes
> +--SKIPIF--
> +<?php
> +include "skipif.inc";
> +?>
> +--FILE--
> +<?php
> +include "php_cli_server.inc";
> +php_cli_server_start('echo done, "\n";', TRUE);
> +
> +list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
> +$port = intval($port)?:80;
> +$output = '';
> +
> +$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
> +if (!$fp) {
> +  die("connect failed");
> +}
> +
> +if(fwrite($fp, <<<HEADER
> +POST /index.php HTTP/1.1
> +Host: {$host}
> +Content-Type: multipart/form-data; boundary=---------123456789
> +Content-Length: 70
> +
> +---------123456789
> +Content-Type: application/x-www-form-urlencoded
> +a=b
> +HEADER
> +)) {
> +       while (!feof($fp)) {
> +               $output .= fgets($fp);
> +       }
> +}
> +
> +fclose($fp);
> +
> +$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
> +if(fwrite($fp, <<<HEADER
> +POST /main/no-exists.php HTTP/1.1
> +Host: {$host}
> +Content-Type: multipart/form-data; boundary=---------123456789
> +Content-Length: 70
> +
> +---------123456789
> +Content-Type: application/x-www-form-urlencoded
> +a=b
> +HEADER
> +)) {
> +       while (!feof($fp)) {
> +               $output .= fgets($fp);
> +       }
> +}
> +
> +echo preg_replace("/<style type=\"text\/css\">(.*?)<\/style>/s", "<style 
> type=\"text/css\">AAA</style>", $output), "\n";
> +fclose($fp);
> +
> +?>
> +--EXPECTF--
> +
> +HTTP/1.1 200 OK
> +Host: %s
> +Connection: closed
> +X-Powered-By: %s
> +Content-type: %s
> +
> +done
> +HTTP/1.1 404 Not Found
> +Host: %s
> +Connection: closed
> +Content-Type: %s
> +Content-Length: %d
> +
> +<html><head><title>404 Not Found</title><style type="text/css">AAA</style>
> +</head><body><h1 class="h">Not Found</h1><p>The requested resource 
> /main/no-exists.php was not found on this server.</p></body></html>
>
> Modified: php/php-src/trunk/sapi/cli/php_cli_server.c
> ===================================================================
> --- php/php-src/trunk/sapi/cli/php_cli_server.c 2011-12-09 05:25:05 UTC (rev 
> 320715)
> +++ php/php-src/trunk/sapi/cli/php_cli_server.c 2011-12-09 05:37:41 UTC (rev 
> 320716)
> @@ -1921,6 +1921,7 @@
>        php_cli_server_close_connection(server, client TSRMLS_CC);
>        destroy_request_info(&SG(request_info));
>        SG(server_context) = NULL;
> +       SG(rfc1867_uploaded_files) = NULL;
>        return SUCCESS;
>  }
>  /* }}} */
>
> Added: php/php-src/trunk/sapi/cli/tests/php_cli_server_014.phpt
> ===================================================================
> --- php/php-src/trunk/sapi/cli/tests/php_cli_server_014.phpt                  
>           (rev 0)
> +++ php/php-src/trunk/sapi/cli/tests/php_cli_server_014.phpt    2011-12-09 
> 05:37:41 UTC (rev 320716)
> @@ -0,0 +1,76 @@
> +--TEST--
> +Bug #60477: Segfault after two multipart/form-data POST requestes
> +--SKIPIF--
> +<?php
> +include "skipif.inc";
> +?>
> +--FILE--
> +<?php
> +include "php_cli_server.inc";
> +php_cli_server_start('echo done, "\n";', TRUE);
> +
> +list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
> +$port = intval($port)?:80;
> +$output = '';
> +
> +$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
> +if (!$fp) {
> +  die("connect failed");
> +}
> +
> +if(fwrite($fp, <<<HEADER
> +POST /index.php HTTP/1.1
> +Host: {$host}
> +Content-Type: multipart/form-data; boundary=---------123456789
> +Content-Length: 70
> +
> +---------123456789
> +Content-Type: application/x-www-form-urlencoded
> +a=b
> +HEADER
> +)) {
> +       while (!feof($fp)) {
> +               $output .= fgets($fp);
> +       }
> +}
> +
> +fclose($fp);
> +
> +$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
> +if(fwrite($fp, <<<HEADER
> +POST /main/no-exists.php HTTP/1.1
> +Host: {$host}
> +Content-Type: multipart/form-data; boundary=---------123456789
> +Content-Length: 70
> +
> +---------123456789
> +Content-Type: application/x-www-form-urlencoded
> +a=b
> +HEADER
> +)) {
> +       while (!feof($fp)) {
> +               $output .= fgets($fp);
> +       }
> +}
> +
> +echo preg_replace("/<style type=\"text\/css\">(.*?)<\/style>/s", "<style 
> type=\"text/css\">AAA</style>", $output), "\n";
> +fclose($fp);
> +
> +?>
> +--EXPECTF--
> +
> +HTTP/1.1 200 OK
> +Host: %s
> +Connection: closed
> +X-Powered-By: %s
> +Content-type: %s
> +
> +done
> +HTTP/1.1 404 Not Found
> +Host: %s
> +Connection: closed
> +Content-Type: %s
> +Content-Length: %d
> +
> +<html><head><title>404 Not Found</title><style type="text/css">AAA</style>
> +</head><body><h1 class="h">Not Found</h1><p>The requested resource 
> /main/no-exists.php was not found on this server.</p></body></html>
>
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php



-- 
Laruence  Xinchen Hui
http://www.laruence.com/

--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to