ID:               44377
 Updated by:       [EMAIL PROTECTED]
 Reported By:      noah at cs dot caltech dot edu
-Status:           Open
+Status:           Feedback
-Bug Type:         Reproducible crash
+Bug Type:         Streams related
 Operating System: GNU/Linux
 PHP Version:      5.2.6RC1
 New Comment:

Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows (zip):
 
  http://snaps.php.net/win32/php5.2-win32-latest.zip

For Windows (installer):

  http://snaps.php.net/win32/php5.2-win32-installer-latest.msi




Previous Comments:
------------------------------------------------------------------------

[2008-03-08 17:30:34] noah at cs dot caltech dot edu

Description:
------------
I set up a web resource served via Apache 2.2.3.  When accessed via
SSL, clients of this resource must authenticate using a client-side SSL
certificate.  I created a PHP client script to connect to this server,
authenticate with an SSL certificate, and submit an HTTP POST request to
the web resource.  The PHP client script receives a segmentation fault
when it attempts to make this connection.

For the purpose of this bug report, I built PHP 5.2.6RC1 as follows:

./configure --prefix=$HOME/sw/nopath/php526 \
--with-config-file-path=$HOME/sw/nopath/php526/etc \
--enable-debug \
--with-jpeg-dir=/usr --with-png-dir=/usr \
--with-zlib-dir=/usr --with-freetype-dir=/usr \
--with-apxs2=/usr/bin/apxs2 --enable-fastcgi \
--with-layout=gnu \
--with-openssl --with-kerberos --with-zlib --with-bz2 --enable-calendar
\
--with-curl=shared \
--enable-dba --with-gdbm --with-db4 --with-inifile --with-flatfile \
--enable-dio --with-dom --with-dom-xslt --with-dom-libexslt
--enable-ftp \
--with-gd --enable-exif \
--with-gettext --with-gmp --with-iconv \
--with-java=/usr/lib/jvm/java-6-sun --with-ldap --enable-mbstring \
--with-mssql=/usr --with-mysql=/usr --with-ncurses \
--with-unixODBC=/usr --with-pgsql --with-readline --enable-shmop \
--with-snmp --enable-sockets \
--enable-sysvmsg --enable-sysvsem --enable-sysvshm \
--enable-wddx --with-xmlrpc \
--enable-xslt --with-xslt-sablot=$HOME/sw/sablotron --enable-yp \
--with-pdo-pgsql --enable-soap --with-xsl --enable-zip

(I know that some of those options are obsolete in PHP 5; I adapted my
PHP 4 configuration line rather hastily.)

I used no php.ini at all.

I also reproduced this problem in PHP 5.2.1 as supplied with Ubuntu
7.04.  On a CentOS 4.5 system with PHP 5.0.4, the runtime caught a
problem at a different level:

*** glibc detected *** malloc(): memory corruption: 0x08697798 ***
Aborted


Reproduce code:
---------------
### SERVER SIDE CODE: /secure/hello.php

$name = file_get_contents('php://input');
if ($name)
     echo "Hello, $name!  ";
print "You made it!\n";

### CLIENT SIDE CODE
$opts = array('http' =>                                                
                                                          
array('method' => 'POST',
                    'header' => 'Content-type: text/plain',
                    'content' => 'Noah'),
              'ssl' =>
              array('verify_peer' => true,
                    'allow_self_signed' => false,
                    'cafile' => 'cacert.pem',
                    'local_cert' => 'client.pem',
                    'passphrase' => 'secret'));

//array_shift($opts)
$response =
file_get_contents('https://10.10.200.250:2083/secure/hello.php', false,
                              stream_context_create($opts));

print $response;

Expected result:
----------------
When I run this client code from the command line (php -f client.php),
I expect $response to contain "Hello, Noah!  You made it!".


Actual result:
--------------
Instead, PHP exits with a segmentation fault.

If I uncomment "array_shift($opts)", thereby switching the request to a
GET, I see the expected response "You made it!".  That is to say, the
mutual certificate authentication works by itself.  Likewise, if I
change "https://10.10.200.250:2083"; to "http://10.10.200.250:2080";,
thereby accessing the same resource without any SSL, I see the expected
response "Hello, Noah!  You made it!".  If I copy hello.php to an area
that does not require certificate authentication and then access it via
SSL, I also see the expected response "Hello, Noah!  You made it!". 
Thus, one needs all of POST, SSL, and mutual certificate authentication
to reproduce this problem.

In the failed case, the Apache log has this:
[Sat Mar 08 12:03:11 2008] [info] [client 10.10.200.250] Connection to
child 4 established (server 10.10.200.250:2083)
[Sat Mar 08 12:03:11 2008] [info] Seeding PRNG with 0 bytes of entropy
[Sat Mar 08 12:03:11 2008] [info] Initial (No.1) HTTPS request received
for child 4 (server 10.10.200.250:2083)
[Sat Mar 08 12:03:11 2008] [info] Requesting connection re-negotiation
[Sat Mar 08 12:03:11 2008] [info] Awaiting re-negotiation handshake
[Sat Mar 08 12:03:11 2008] [error] Re-negotiation handshake failed: Not
accepted by client!?

This is the backtrace for the PHP command-line instance running the
client script:
(gdb) bt
#0  0x084b6749 in zend_mm_search_large_block (heap=0x88261f8,
true_size=332)
    at /home/nmisch/src/build/php-5.2.6RC1/Zend/zend_alloc.c:1735
#1  0x084b68f2 in _zend_mm_alloc_int (heap=0x88261f8, size=287, 
    __zend_filename=0x87b7b5c
"/home/nmisch/src/build/php-5.2.6RC1/main/spprintf.c",
__zend_lineno=750, 
    __zend_orig_filename=0x0, __zend_orig_lineno=0) at
/home/nmisch/src/build/php-5.2.6RC1/Zend/zend_alloc.c:1794
#2  0x084b7ce4 in _zend_mm_realloc_int (heap=0x88261f8, p=0x898d724,
size=287, 
    __zend_filename=0x87b7b5c
"/home/nmisch/src/build/php-5.2.6RC1/main/spprintf.c",
__zend_lineno=750, 
    __zend_orig_filename=0x0, __zend_orig_lineno=0) at
/home/nmisch/src/build/php-5.2.6RC1/Zend/zend_alloc.c:2213
#3  0x084b7fdf in _erealloc (ptr=0x898d724, size=287, allow_failure=0,

    __zend_filename=0x87b7b5c
"/home/nmisch/src/build/php-5.2.6RC1/main/spprintf.c",
__zend_lineno=750, 
    __zend_orig_filename=0x0, __zend_orig_lineno=0) at
/home/nmisch/src/build/php-5.2.6RC1/Zend/zend_alloc.c:2303
#4  0x0848475c in xbuf_format_converter (xbuf=0xbfe47eac, fmt=0x856095e
"s", ap=0xbfe47fb8 "")
    at /home/nmisch/src/build/php-5.2.6RC1/main/spprintf.c:750
#5  0x084849fd in vspprintf (pbuf=0xbfe47f1c, max_len=0, 
    format=0x8560938 "SSL operation failed with code %d. %s%s",
ap=0xbfe47fac "\001")
    at /home/nmisch/src/build/php-5.2.6RC1/main/spprintf.c:769
#6  0x0847d8e0 in php_verror (docref=0x0, params=0x87b6a11 "", type=2,

    format=0x8560938 "SSL operation failed with code %d. %s%s",
args=0xbfe47fac "\001")
    at /home/nmisch/src/build/php-5.2.6RC1/main/main.c:578
#7  0x0847e0cc in php_error_docref0 (docref=0x0, type=2,
format=0x8560938 "SSL operation failed with code %d. %s%s")
    at /home/nmisch/src/build/php-5.2.6RC1/main/main.c:734
#8  0x080c169a in handle_ssl_error (stream=0x898d804, nr_bytes=-1,
is_init=0 '\0')
    at /home/nmisch/src/build/php-5.2.6RC1/ext/openssl/xp_ssl.c:167
#9  0x080c18ea in php_openssl_sockop_read (stream=0x898d804,
buf=0x898dbac "", count=8192)
    at /home/nmisch/src/build/php-5.2.6RC1/ext/openssl/xp_ssl.c:229
#10 0x084970e3 in php_stream_fill_read_buffer (stream=0x898d804,
size=126)
    at /home/nmisch/src/build/php-5.2.6RC1/main/streams/streams.c:545
#11 0x0849784e in _php_stream_get_line (stream=0x898d804,
buf=0xbfe49194 "", maxlen=127, returned_len=0xbfe48494)
    at /home/nmisch/src/build/php-5.2.6RC1/main/streams/streams.c:824
#12 0x0842e51c in php_stream_url_wrap_http_ex (wrapper=0x8815068, 
    path=0x898c3d0 "https://10.10.200.250:2083/secure/hello.php";,
mode=0x87a2d46 "rb", options=4, opened_path=0x0, 
    context=0x898c4a0, redirect_max=20, header_init=1,
__php_stream_call_depth=0, 
    __zend_filename=0x87abae4
"/home/nmisch/src/build/php-5.2.6RC1/ext/standard/http_fopen_wrapper.c",

    __zend_lineno=710, __zend_orig_filename=0x0, __zend_orig_lineno=0)
    at
/home/nmisch/src/build/php-5.2.6RC1/ext/standard/http_fopen_wrapper.c:494
#13 0x0842f6ed in php_stream_url_wrap_http (wrapper=0x8815068, 
    path=0x898c3d0 "https://10.10.200.250:2083/secure/hello.php";,
mode=0x87a2d46 "rb", options=4, opened_path=0x0, 
    context=0x898c4a0, __php_stream_call_depth=1, 
    __zend_filename=0x87bb80c
"/home/nmisch/src/build/php-5.2.6RC1/main/streams/streams.c",
__zend_lineno=1789, 
    __zend_orig_filename=0x87a2748
"/home/nmisch/src/build/php-5.2.6RC1/ext/standard/file.c", 
    __zend_orig_lineno=551) at
/home/nmisch/src/build/php-5.2.6RC1/ext/standard/http_fopen_wrapper.c:710
#14 0x08499fc7 in _php_stream_open_wrapper_ex (path=0x898c3d0
"https://10.10.200.250:2083/secure/hello.php";, 
    mode=0x87a2d46 "rb", options=12, opened_path=0x0,
context=0x898c4a0, __php_stream_call_depth=0, 
    __zend_filename=0x87a2748
"/home/nmisch/src/build/php-5.2.6RC1/ext/standard/file.c",
__zend_lineno=551, 
    __zend_orig_filename=0x0, __zend_orig_lineno=0)
    at /home/nmisch/src/build/php-5.2.6RC1/main/streams/streams.c:1787
#15 0x083d0d35 in zif_file_get_contents (ht=3, return_value=0x898d62c,
return_value_ptr=0x0, this_ptr=0x0, 
    return_value_used=1) at
/home/nmisch/src/build/php-5.2.6RC1/ext/standard/file.c:549
#16 0x084fabb5 in zend_do_fcall_common_helper_SPEC
(execute_data=0xbfe49530)
    at /home/nmisch/src/build/php-5.2.6RC1/Zend/zend_vm_execute.h:200
#17 0x08500459 in ZEND_DO_FCALL_SPEC_CONST_HANDLER
(execute_data=0xbfe49530)
    at /home/nmisch/src/build/php-5.2.6RC1/Zend/zend_vm_execute.h:1682
#18 0x084fa705 in execute (op_array=0x898b28c) at
/home/nmisch/src/build/php-5.2.6RC1/Zend/zend_vm_execute.h:92
#19 0x084d56ed in zend_execute_scripts (type=8, retval=0x0,
file_count=3)
    at /home/nmisch/src/build/php-5.2.6RC1/Zend/zend.c:1134
#20 0x084807a9 in php_execute_script (primary_file=0xbfe4b8a4)
    at /home/nmisch/src/build/php-5.2.6RC1/main/main.c:2006
#21 0x0855c9cf in main (argc=3, argv=0xbfe4ba24) at
/home/nmisch/src/build/php-5.2.6RC1/sapi/cli/php_cli.c:1140

Thanks!


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=44377&edit=1

Reply via email to