This fixes a bug in declaration handling.  HTML::Parser supports comments
within declarations (<! foo -- comment -->) incorrectly.  Once we trigger
a comment "--" we look for the next instance of "--" to denote the end of
the comment.  I put in a check for the end of tag character '>', otherwise
we dont get out of comment mode before the appearance of another "--"
marker.

-f

diff -u -r HTML-Parser-3.06/hparser.c HTML-Parser-3.06.fixed/hparser.c
--- HTML-Parser-3.06/hparser.c  Mon Mar  6 08:30:13 2000
+++ HTML-Parser-3.06.fixed/hparser.c    Tue Mar  7 11:24:54 2000
@@ -792,8 +792,10 @@
        s++;
 
        while (1) {
-         while (s < end && *s != '-')
+         while (s < end && *s != '-' && *s != '>')
            s++;
+          if (*s == '>')
+              goto DONE;
          if (s == end)
            goto PREMATURE;
          s++;
@@ -824,7 +826,8 @@
     if (s == end)
       goto PREMATURE;
     if (*s == '>') {
-      s++;
+      DONE:
+        s++;
       report_event(p_state, E_DECLARATION, beg, s, tokens, num_tokens,
                   offset, self);
       FREE_TOKENS;
diff -u -r HTML-Parser-3.06/hparser.c HTML-Parser-3.06.fixed/hparser.c
--- HTML-Parser-3.06/hparser.c  Mon Mar  6 08:30:13 2000
+++ HTML-Parser-3.06.fixed/hparser.c    Tue Mar  7 11:24:54 2000
@@ -792,8 +792,10 @@
        s++;
 
        while (1) {
-         while (s < end && *s != '-')
+         while (s < end && *s != '-' && *s != '>')
            s++;
+          if (*s == '>')
+              goto DONE;
          if (s == end)
            goto PREMATURE;
          s++;
@@ -824,7 +826,8 @@
     if (s == end)
       goto PREMATURE;
     if (*s == '>') {
-      s++;
+      DONE:
+        s++;
       report_event(p_state, E_DECLARATION, beg, s, tokens, num_tokens,
                   offset, self);
       FREE_TOKENS;

Reply via email to