ID:               17419
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Analyzed
 Bug Type:         Session related
 Operating System: BSDi
 PHP Version:      4.2.1
 New Comment:

Circular references don't work with the serializer


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

[2002-06-01 06:14:21] [EMAIL PROTECTED]

Consider the following sample script:

<?php
session_start();
class alpha {
        var $b; 
        function alpha() {
                $this->b = &new beta(&$this);
        }
}

class beta {
        function beta($t) {
                $this->t = &$t;
        }
}

if($_GET['set']) {
        $_SESSION['a'] = &new alpha();
} else {
        print_r($_SESSION['a']);
}
?>

First, call this script with ?set=1.
Then, call it without any arguments and nothing will happen. The
connection will close inmediately:
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /test.php?PHPSESSID=dcfffa113d892c4320d6109c6bd07795 HTTP/1.1
Host: localhost

Connection closed by foreign host.

This was exactly what happend with the sample simpleclass.php script
provided by [EMAIL PROTECTED]

Apache logs show a couple of memleaks and a segfault:
home/sander/php/head/Zend/zend_hash.c(262) :  Freeing 0x0821CD4C (37
bytes), script=/home/sander/public_html/test.php
Last leak repeated 1 time
/home/sander/php/head/Zend/zend_hash.c(178) :  Freeing 0x0821B1BC (32
bytes), script=/home/sander/public_html/test.php
Last leak repeated 1 time
/home/sander/php/head/Zend/zend_API.c(597) :  Freeing 0x0821B15C (44
bytes), script=/home/sander/public_html/test.php
/home/sander/php/head/Zend/zend_API.c(585) : Actual location (location
was relayed)
Last leak repeated 1 time
/home/sander/php/head/Zend/zend_execute.c(1937) :  Freeing 0x0821B11C
(12 bytes), script=/home/sander/public_html/test.php
Last leak repeated 1 time
/home/rasmus/php4/ext/standard/url_scanner_ex.re(409) :  Freeing
0x08219B6C (13 bytes), script=/home/sander/public_html/test.php
[Sat Jun  1 12:06:13 2002] [notice] child pid 4079 exit signal
Segmentation fault (11)

Backtrace:
Program received signal SIGSEGV, Segmentation fault.
0x4010cf96 in malloc () from /lib/libc.so.6
(gdb) bt
#0  0x4010cf96 in malloc () from /lib/libc.so.6
#1  0x403d9a4f in _emalloc (size=35, 
    __zend_filename=0x404b0c80
"/home/sander/php/head/Zend/zend_hash.c", 
    __zend_lineno=406, __zend_orig_filename=0x0, __zend_orig_lineno=0)
    at /home/sander/php/head/Zend/zend_alloc.c:165
#2  0x403f46cc in zend_hash_index_update_or_next_insert (ht=0xbfffef34,

    h=23815, pData=0xbf800108, nDataSize=4, pDest=0x0, flag=4)
    at /home/sander/php/head/Zend/zend_hash.c:406
#3  0x4038f81a in php_add_var_hash (var_hash=0xbfffef34, var=0x8219b9c,

    var_old=0xbf800264) at
/home/sander/php/head/ext/standard/var.c:393
#4  0x4038ed6e in php_var_serialize_intern (buf=0xbfffef60,
struc=0x8219b10, 
    var_hash=0xbfffef34) at
/home/sander/php/head/ext/standard/var.c:497
#5  0x4038f277 in php_var_serialize_intern (buf=0xbfffef60,
struc=0x8219d00, 
    var_hash=0xbfffef34) at
/home/sander/php/head/ext/standard/var.c:606
#6  0x4038f277 in php_var_serialize_intern (buf=0xbfffef60,
struc=0x8219b10, 
    var_hash=0xbfffef34) at
/home/sander/php/head/ext/standard/var.c:606
#7  0x4038f277 in php_var_serialize_intern (buf=0xbfffef60,
struc=0x8219d00, 
    var_hash=0xbfffef34) at
/home/sander/php/head/ext/standard/var.c:606
#8  0x4038f277 in php_var_serialize_intern (buf=0xbfffef60,
struc=0x8219b10, 
    var_hash=0xbfffef34) at
/home/sander/php/head/ext/standard/var.c:606
#9  0x4038f277 in php_var_serialize_intern (buf=0xbfffef60,
struc=0x8219d00, 
    var_hash=0xbfffef34) at
/home/sander/php/head/ext/standard/var.c:606
etc etc etc

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

[2002-05-31 09:51:02] [EMAIL PROTECTED]

Also worked fine on my OSX boxen.

I don't know what browser you are using so I can't comment on the
validity of that error message (possible MSIE pretty error page?).

One thing to try, turn on your register_globals.  Your example kind of
needs that, or different calling methods.

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

[2002-05-31 09:44:05] [EMAIL PROTECTED]

Your example works fine on my FreeBSD 4.5 system using PHP 4.2.1.  

Also updated your OS to BSDi instead of Apache.

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

[2002-05-29 10:11:28] [EMAIL PROTECTED]

The correct operating system if BSDi 4.3

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

[2002-05-26 22:13:08] [EMAIL PROTECTED]

OK -- I have tried to telnet to the domain and cannot do that either. 
Here is the URL:

http://sql.wash-gop.com/wyck/WebSiteII/html/simpleclass.php

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/17419

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

Reply via email to