Blob Blame History Raw
diff --git a/SAX/PurePerl.pm b/SAX/PurePerl.pm
--- a/SAX/PurePerl.pm	2006-04-24 01:20:09.000000000 +0200
+++ b/SAX/PurePerl.pm	2012-08-09 12:47:48.736728516 +0200
@@ -595,22 +595,23 @@ sub Comment {
     
     my $data = $reader->data(4);
     if ($data =~ /^<!--/) {
-        $reader->move_along(4);
+        $reader->move_along(4); # skip comment start
+        $data = $reader->data;
+        while ($data !~ m!-->!) {
+            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 });