On Mon, Apr 20, 2015 at 12:21 AM, Stanislav Malyshev <smalys...@gmail.com>
wrote:

> Hi!
>
> > Just a simple use case showing how dangerous that is :
> >
> > <?php
> > $p = function($p) { $this->$p = new Stdclass; };
> > $p->call($e = new Exception, 'trace');
> > throw $e;
>
> Yes, this is not good, and this is the consequence of allowing to rebind
> closures. I'm not sure though how to fix it except for banning closures
> from assuming scope of internal classes. If you assigned the scope of
> Exception to it, it should have access to Exception - that's how the
> scope works.
>
> > For User classes, this could lead to information leaks or bad behaviors,
>
> I'm not sure what you mean by "information leaks", but the behavior is
> on whoever wrote that code. People can write bad code, we can't disallow
> this. We can restrict things that would really break (like segfault) but
> I'm not sure what else we can do here. If you have the scope of the
> class, that implies access to the private members of the class. So we
> either have to not let the closure have the scope, or invent some
> additional term of scope' that is not like real scope. I don't think
> it'd be good.
>


Yup Stas.

Perhaps the best thing to do is to forbid rebinding a Closure to an
internal class ?

I'm sure we could find segfaulting behaviors using such a trick on most of
our internals classes, aka mysqli, simplexmlelement, PDO or SPL classes.

Thoughts ?

Julien.P

Reply via email to