On Tue, Mar 24, 2015 at 2:51 PM, Nikita Popov <nikita....@gmail.com> wrote:

> On Tue, Mar 24, 2015 at 10:28 AM, Dmitry Stogov <dmi...@zend.com> wrote:
>
>> I thought about something like this :)
>> In my opinion UString is really not a proper way to implement Unicoide,
>> but I agree not break anything in current stage.
>> Anyway, please review the first PR (in my opinion it is safe to commit),
>> but you may find some other issues.
>>
>> Thanks. Dmitry.
>>
>
> First PR looks okay to me. One question: Why the separate INIT and ADD
> opcodes? They seem pretty much the same, just one using a hardcoded 0
> instead of ex_val.
>

Oh. It's historical, at first we allocated rope on heap. I'll check if
INIT_ROPE is still necessary.
Most probably we still need it, to know the size of rope vector.


> Regarding exception-safety - is the problem that doing an EG(exception)
> check and releasing the rope is too expensive?
>

No. It's a common problem. Because exception may be thrown in some other
opcode and we don't clean IS_VAR/IS_TMP_VAR zvals.
For example the following script leaks independently from the patch

<?php
function foo() {
  throw new Exception();
}
try {
        $a = "a";
        $a = $a . $a . $a . foo() . $a . "\n";
} catch (Exception $e) {
}
?>

Thanks. Dmitry.


>
> Nikita
>

Reply via email to