From:             nikic
Operating system: 
PHP version:      5.4.0RC7
Package:          Reproducible crash
Bug Type:         Bug
Bug description:Stream related segfault on fatal error in 
php_stream_context_del_link

Description:
------------
<?php

$arrayLarge = array_fill(0, 113663, '*');

$resourceFileTemp = fopen('php://temp', 'wr');
stream_context_set_params($resourceFileTemp, array());
preg_replace('', function () { }, $resourceFileTemp);

The above script produces a segfault. The array_fill line is irrelevant for
the 
bug itself, but I needed it to get a segfault on non-debug builds too
(without 
it it only segfaulted on debug builds.)

The type of the file resource is irrelevant, it is not restricted to
php://temp.

The preg_replace + function() { } only serves the purpose to create a fatal

error with the file argument, but apart from that should be irrelevant (it
also 
occurs in lots of other situations that create a fatal error in a function

call.)

This segfault basically occurs in situations where:
1. A file resource is opened
2. Some stream operation is performed on it
3. A fatal error is issued from a function which the file resource was
passed to

Here is the backtrace:


(gdb) run workingFile5_segfault.php 
Starting program: /usr/local/bin/php workingFile5_segfault.php
[Thread debugging using libthread_db enabled]

Catchable fatal error: Object of class Closure could not be converted to
string 
in /home/nikic/dev/my-fuzzer/results/workingFile5_segfault.php on line 8

Program received signal SIGSEGV, Segmentation fault.
0x084c95cb in php_stream_context_del_link (context=0xb73cbddc, 
    stream=0xb73cba00) at
/home/nikic/dev/php-src/main/streams/streams.c:2256
2256            for(zend_hash_internal_pointer_reset(Z_ARRVAL_P(context-
>links));
(gdb) bt
#0  0x084c95cb in php_stream_context_del_link (context=0xb73cbddc, 
    stream=0xb73cba00) at
/home/nikic/dev/php-src/main/streams/streams.c:2256
#1  0x084c4953 in _php_stream_free (stream=0xb73cba00, close_options=3, 
    tsrm_ls=0x8b26050) at
/home/nikic/dev/php-src/main/streams/streams.c:449
#2  0x084c48a4 in _php_stream_free (stream=0xb73cbb90, close_options=11, 
    tsrm_ls=0x8b26050) at
/home/nikic/dev/php-src/main/streams/streams.c:406
#3  0x084c7059 in stream_resource_regular_dtor (rsrc=0xb73cbca0, 
    tsrm_ls=0x8b26050) at
/home/nikic/dev/php-src/main/streams/streams.c:1578
#4  0x085587f3 in list_entry_destructor (ptr=0xb73cbca0)
    at /home/nikic/dev/php-src/Zend/zend_list.c:183
#5  0x08555fc6 in zend_hash_apply_deleter (ht=0x8b280ac, p=0xb73cbc4c)
    at /home/nikic/dev/php-src/Zend/zend_hash.c:650
#6  0x08556154 in zend_hash_graceful_reverse_destroy (ht=0x8b280ac)
    at /home/nikic/dev/php-src/Zend/zend_hash.c:687
#7  0x085589d5 in zend_destroy_rsrc_list (ht=0x8b280ac, tsrm_ls=0x8b26050)
    at /home/nikic/dev/php-src/Zend/zend_list.c:239
#8  0x0854474a in zend_deactivate (tsrm_ls=0x8b26050)
    at /home/nikic/dev/php-src/Zend/zend.c:940
#9  0x084a6b4d in php_request_shutdown (dummy=0x0)
    at /home/nikic/dev/php-src/main/main.c:1781
#10 0x086907c5 in do_cli (argc=2, argv=0xbffff3d4, tsrm_ls=0x8b26050)
    at /home/nikic/dev/php-src/sapi/cli/php_cli.c:1169
#11 0x08691058 in main (argc=2, argv=0xbffff3d4)
    at /home/nikic/dev/php-src/sapi/cli/php_cli.c:1356

I was not yet able to understand the source of the segfault; would be nice
if 
someone who knows the stream stuff better could give a hand :)


-- 
Edit bug report at https://bugs.php.net/bug.php?id=61115&edit=1
-- 
Try a snapshot (PHP 5.4):            
https://bugs.php.net/fix.php?id=61115&r=trysnapshot54
Try a snapshot (PHP 5.3):            
https://bugs.php.net/fix.php?id=61115&r=trysnapshot53
Try a snapshot (trunk):              
https://bugs.php.net/fix.php?id=61115&r=trysnapshottrunk
Fixed in SVN:                        
https://bugs.php.net/fix.php?id=61115&r=fixed
Fixed in SVN and need be documented: 
https://bugs.php.net/fix.php?id=61115&r=needdocs
Fixed in release:                    
https://bugs.php.net/fix.php?id=61115&r=alreadyfixed
Need backtrace:                      
https://bugs.php.net/fix.php?id=61115&r=needtrace
Need Reproduce Script:               
https://bugs.php.net/fix.php?id=61115&r=needscript
Try newer version:                   
https://bugs.php.net/fix.php?id=61115&r=oldversion
Not developer issue:                 
https://bugs.php.net/fix.php?id=61115&r=support
Expected behavior:                   
https://bugs.php.net/fix.php?id=61115&r=notwrong
Not enough info:                     
https://bugs.php.net/fix.php?id=61115&r=notenoughinfo
Submitted twice:                     
https://bugs.php.net/fix.php?id=61115&r=submittedtwice
register_globals:                    
https://bugs.php.net/fix.php?id=61115&r=globals
PHP 4 support discontinued:          
https://bugs.php.net/fix.php?id=61115&r=php4
Daylight Savings:                    https://bugs.php.net/fix.php?id=61115&r=dst
IIS Stability:                       
https://bugs.php.net/fix.php?id=61115&r=isapi
Install GNU Sed:                     
https://bugs.php.net/fix.php?id=61115&r=gnused
Floating point limitations:          
https://bugs.php.net/fix.php?id=61115&r=float
No Zend Extensions:                  
https://bugs.php.net/fix.php?id=61115&r=nozend
MySQL Configuration Error:           
https://bugs.php.net/fix.php?id=61115&r=mysqlcfg

Reply via email to