Suggested fix for bug #22592

php.internals

Moriyoshi Koizumi

23 years ago
Attached is a suggested fix for bug #22592, which has finally come out of a successful long-hour-introspection with zend_execute.c. Although the patch actually does somewhat hackish things and should appear to be invalid, I believe it's the right one. Moriyoshi

Andi Gutmans

23 years ago
It indeed does look very hackish. Is this bug the same bug as the last patch of yours addressed? I'll try and take a look at the bug report this week. I'm not quite sure this can/should be fixed. AFAIK the return value of $str[1] = '*' is the updated string itself and not the assigned '*'. Andi At 09:07 AM 3/16/2003 +0900, Moriyoshi Koizumi wrote:

Moriyoshi Koizumi

23 years ago
Andi Gutmans <andi@zend.com> wrote:
> It indeed does look very hackish. Is this bug the same bug as the last > patch of yours addressed?
Not the same, but those are similar in the point that both are basically because of the current engine's limitation in handling temporary variables. (If my understanding is correct, they are a kind of local variables which are allocated during compile time. Am I right? :) In this case, the problem is that no result znode is produced after assigning a string element to another element within a string. So first I was trying to simply set the result node with op2, the znode to be assigned to, but that led a bunch of memleaks if op2 is IS_VAR and derived from a zval that represents a referenced string element because that kind of temporary variables will never be freed unless it has oppotunity to be assigned to a real variable znode. Then the patch ended up with my decision to statically allocate a space for such a string in each znode structure.
> I'll try and take a look at the bug report this week. I'm not quite sure > this can/should be fixed. AFAIK the return value of $str[1] = '*' is the > updated string itself and not the assigned '*'.
I'm wondering if it can be fixed in a cleaner way either, but I think the bug should be fixed in any way, as long as we have to implement string element access by offset for backwards compatibilities. And actually my patch addresses another bug in ZE2 code related to this issue. String offsets should be represented by signed integers so as to handle a erroneous case that the offset is less than 0. ZE1 has no problems about this. Moriyoshi