Quite a convoluted example. I now have the example that segfaults down to
this; still investigating to understand what happens.
#!/usr/bin/perl
use strict;
use HTML::Parser;
{
package Parseable;
my $this;
sub new {
if (!$this) {
$this = bless {};
}
$this->{parser} = new HTML::Parser(
start_h => [sub {
warn "before new p";
Parseable->new;
warn "after new p";
}],
);
$this;
}
}
Parseable->new->{parser}->parse(q(<foo>));
On Nov 7, 2010, at 21:10 , Father Chrysostomos wrote:
> I *think* this is a bug in HTML::Parser, but I’m not sure.
>
> Attached is a script that reproduces the bug. It is reduced from a script
> submitted to <http://rt.perl.org/rt3/Ticket/Display.html?id=78728>. I cannot
> reduce it any further while still producing the bug reliably.
>
> When a new HTML::Parser object is created from within a start handler
> (start_h), p_state->buf in the original parser gets overwritten somehow.
> <crawl.pl>