oalders / html-restrict

HTML::Restrict - Strip away unwanted HTML tags

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

constructor returning undef

opened this issue · comments

I am getting similar failures to this test report:
http://www.cpantesters.org/cpan/report/ad018ad4-b567-11e2-8c80-50d7c5c10595

Somehow this managed to install fine with cpanm when I upgraded to the latest version, but now it always dies with the error Can't call method "parse" on an undefined value.
Reverting back to 2.1.4 fixes the problem.

I'm on OS X 10.7.5 with Perl 5.16.3.

I'm guessing this is related to the latest patch provided by @bleargh45

So, this is introduced by the change I mentioned earlier, but it's triggered by Moo 1.002000, which handles weak_ref differently. Running it under Moo 1.001000 is fine. I'll see what I can find out about this.

ilmari: oalders: that use of weak_ref is bogus. it's the $self you close over in the HTML::Parser callbacks that needs to be weakened
[11:11am] oalders: ilmari: i will fix that
[11:11am] oalders: thanks for your help
[11:12am] ilmari: just add weaken($self) before return HTML::Parser->new(...) in _build_parser
[11:13am] oalders: great. i'll try that today
[11:14am] haarg: oalders: i mentioned on the ticket, but that was an explicit change to bring weak_ref+lazy in line with how Moose behaves.
[11:15am] oalders: haarg: thanks. i wasn't aware of that
[11:15am] haarg: i agree with ilmari that your usage looks wrong anyway. pretty sure parser would get re-calculated every time it was requested anyway.
[11:16am] oalders: well, there is an accompanying test for that change and it did pass
[11:16am] ilmari: haarg: no, it'd stay alive because of the closure
[11:16am] oalders: https://github.com/oalders/html-restrict/blob/master/t/memory-leak.t
[11:16am] ilmari: it's usually the attribute's reference to the owner that should be weakened
[11:16am] oalders: is it not the correct test?
[11:17am] haarg: ilmari: which closure?
[11:17am] ilmari: oalders: that passes with moving the weakening from the attribute to the closure
[11:17am] oalders: ok
[11:17am] ilmari: haarg: the ones passed to HTML::Parser->new in _build_parser
[11:18am] haarg: but that's a reference to $self from the parser. with the weak ref it wouldn't have any other references to the parser itself.
[11:20am] ilmari: haarg: yeah, you're right
[11:22am] haarg: ah, now i remember why it would have worked before. weak_ref+lazy was broken differently before. it would always recalculate.
[11:22am] haarg: i had a fix for that (if you stored the return value somewhere) but we decided to just break (imo) weak_ref+lazy in the same way as moose.
[11:24am] haarg: either way the old behavior was wrong and relying on it like HTML::Restrict did was invalid.

Fixed in 2.1.6