diff --git a/lib/XML/SAX/PurePerl.pm b/lib/XML/SAX/PurePerl.pm --- a/lib/XML/SAX/PurePerl.pm 2006-04-24 01:20:09.000000000 +0200 +++ b/lib/XML/SAX/PurePerl.pm 2012-08-09 12:47:48.736728516 +0200 @@ -595,22 +595,23 @@ sub Comment { my $data = $reader->data(4); if ($data =~ /^!) { + my $n = $reader->read_more; + $self->parser_error("End of data seen while looking for close comment marker", $reader) + unless $n; + $data = $reader->data; + } + my $comment_str = ''; - while (1) { - my $data = $reader->data; - $self->parser_error("End of data seen while looking for close comment marker", $reader) - unless length($data); - if ($data =~ /^(.*?)-->/s) { - $comment_str .= $1; - $self->parser_error("Invalid comment (dash)", $reader) if $comment_str =~ /-$/; - $reader->move_along(length($1) + 3); - last; - } - else { - $comment_str .= $data; - $reader->move_along(length($data)); - } + if ($data =~ /^(.*?)-->/s) { + $comment_str = $1; + $self->parser_error("Invalid comment (dash)", $reader) if $comment_str =~ /-$/; + $reader->move_along(length($1) + 3); + } + else { + return 0; } $self->comment({ Data => $comment_str });