Ok, attached is a diff that properly fixes the problem.

-Sterling

> At 04:06 PM 1/13/2004 -0500, Sterling Hughes wrote:
> >> Are you sure this is OK? It seems strange that string offsets don't need
> >> any unlocking. It might mean we have a problem someplace else and that
> >> you're fixing the cause and not the source of the problem (although I
> >> haven't had time to dig deep).
> >> In general, consider the following code:
> >> $a = "Foo";
> >>
> >> switch ($a[0]) {
> >>         case 'b':
> >>                 break;
> >>         case 'c':
> >>                 break;
> >>         case 'F':
> >>                 break;
> >> }
> >>
> >> Are you sure this doesn't leak now? I don't have time to look at it now,
> >> but if you are absolutely convinced the patch makes sense I'll try and 
> >step
> >> through it with a debugger as soon as I have some free time.
> >>
> >
> >No, I was wrong.  I hate the memory manager, it cleans up my leaks for
> >me - makes it impossible to rely on valgrind.  ;) Anyway to turn that off?
> 
> If you're running in --enable-debug it should be telling you about the 
> leaks.
> 
> >I'm playing around some more now.
> 
> OK thanks.
> 
> Andi
> 
Index: zend_execute.c
===================================================================
RCS file: /repository/ZendEngine2/zend_execute.c,v
retrieving revision 1.583
diff -u -r1.583 zend_execute.c
--- zend_execute.c      9 Jan 2004 13:52:19 -0000       1.583
+++ zend_execute.c      13 Jan 2004 22:24:18 -0000
@@ -195,11 +195,10 @@
        switch (opline->op1.op_type) {
                case IS_VAR:
                        if (!T(opline->op1.u.var).var.ptr_ptr) {
-                               temp_variable *T = &T(opline->op1.u.var);
                                /* perform the equivalent of equivalent of a
                                 * quick & silent get_zval_ptr, and FREE_OP
                                 */
-                               PZVAL_UNLOCK(T->var.str_offset.str);
+                               PZVAL_UNLOCK(*Ts->var.ptr_ptr);
                        } else {
                                zval_ptr_dtor(&T(opline->op1.u.var).var.ptr);
                                if (opline->extended_value) { /* foreach() free */

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to