---
 src/tokeniser/tokeniser.c | 108 ++++++++++++++++++++++++----------------------
 1 file changed, 56 insertions(+), 52 deletions(-)

diff --git a/src/tokeniser/tokeniser.c b/src/tokeniser/tokeniser.c
index 7152f05..3c18e92 100644
--- a/src/tokeniser/tokeniser.c
+++ b/src/tokeniser/tokeniser.c
@@ -1537,44 +1537,46 @@ hubbub_error 
hubbub_tokeniser_handle_rcdata_close_tag_open(hubbub_tokeniser *tok
        parserutils_error error;
        uint8_t c;
 
+       uint8_t *start_tag_name =
+                               tokeniser->context.last_start_tag_name;
+               size_t start_tag_len =
+                       tokeniser->context.last_start_tag_len;
+
        assert(tokeniser->context.pending == 2);
 /*     assert(tokeniser->context.chars.ptr[0] == '<'); */
 /*     assert(tokeniser->context.chars.ptr[1] == '/'); */
 
-       uint8_t *start_tag_name =
-                       tokeniser->context.last_start_tag_name;
-       size_t start_tag_len =
-               tokeniser->context.last_start_tag_len;
-
-       while ((error = parserutils_inputstream_peek(tokeniser->input,
-                               ctx->pending +
-                                       ctx->close_tag_match.count,
-                               &cptr,
-                               &len)) == PARSERUTILS_OK) {
-               c = *cptr;
+       if (ctx->close_tag_match.match == false) {
 
-               if ((start_tag_name[ctx->close_tag_match.count] & ~0x20)
-                               != (c & ~0x20)) {
-                       break;
-               }
-
-               ctx->close_tag_match.count += len;
+               while ((error = parserutils_inputstream_peek(tokeniser->input,
+                                       ctx->pending +
+                                               ctx->close_tag_match.count,
+                                       &cptr,
+                                       &len)) == PARSERUTILS_OK) {
+                       c = *cptr;
+                       if ((start_tag_name[ctx->close_tag_match.count] & ~0x20)
+                                       != (c & ~0x20)) {
+                               break;
+                       }
 
-               if (ctx->close_tag_match.count == start_tag_len) {
+                       ctx->close_tag_match.count += len;
 
-                       // Sets the flag to be used in name state.
-                       ctx->close_tag_match.match = true;
-                       break;
+                       if (ctx->close_tag_match.count == start_tag_len) {
+                               // Sets the flag to be used in name state.
+                               ctx->close_tag_match.match = true;
+                               break;
+                       }
                }
-       }
 
-       if (error != PARSERUTILS_OK) {
-               if (error == PARSERUTILS_EOF) {
-                       tokeniser->state = STATE_RCDATA;
-                       tokeniser->context.pending += 
ctx->close_tag_match.count;
-                       return HUBBUB_OK;
-               } else {
-                       return hubbub_error_from_parserutils_error(error);
+               if (error != PARSERUTILS_OK) {
+                       if (error == PARSERUTILS_EOF) {
+                               tokeniser->state = STATE_RCDATA;
+                               tokeniser->context.pending += 
ctx->close_tag_match.count;
+
+                               return HUBBUB_OK;
+                       } else {
+                               return 
hubbub_error_from_parserutils_error(error);
+                       }
                }
        }
 
@@ -1752,35 +1754,37 @@ hubbub_error 
hubbub_tokeniser_handle_rawtext_close_tag_open(hubbub_tokeniser *to
        size_t start_tag_len =
                tokeniser->context.last_start_tag_len;
 
-       while ((error = parserutils_inputstream_peek(tokeniser->input,
-                               ctx->pending +
-                                       ctx->close_tag_match.count,
-                               &cptr,
-                               &len)) == PARSERUTILS_OK) {
-               c = *cptr;
+       if (ctx->close_tag_match.match == false) {
+               while ((error = parserutils_inputstream_peek(tokeniser->input,
+                                       ctx->pending +
+                                               ctx->close_tag_match.count,
+                                       &cptr,
+                                       &len)) == PARSERUTILS_OK) {
+                       c = *cptr;
 
-               if ((start_tag_name[ctx->close_tag_match.count] & ~0x20)
-                               != (c & ~0x20)) {
-                       break;
-               }
+                       if ((start_tag_name[ctx->close_tag_match.count] & ~0x20)
+                                       != (c & ~0x20)) {
+                               break;
+                       }
 
-               ctx->close_tag_match.count += len;
+                       ctx->close_tag_match.count += len;
 
-               if (ctx->close_tag_match.count == start_tag_len) {
+                       if (ctx->close_tag_match.count == start_tag_len) {
 
-                       // Sets the flag to be used in name state.
-                       ctx->close_tag_match.match = true;
-                       break;
+                               // Sets the flag to be used in name state.
+                               ctx->close_tag_match.match = true;
+                               break;
+                       }
                }
-       }
 
-       if (error != PARSERUTILS_OK) {
-               if (error == PARSERUTILS_EOF) {
-                       tokeniser->state = STATE_RAWTEXT;
-                       tokeniser->context.pending += 
ctx->close_tag_match.count;
-                       return HUBBUB_OK;
-               } else {
-                       return hubbub_error_from_parserutils_error(error);
+               if (error != PARSERUTILS_OK) {
+                       if (error == PARSERUTILS_EOF) {
+                               tokeniser->state = STATE_RAWTEXT;
+                               tokeniser->context.pending += 
ctx->close_tag_match.count;
+                               return HUBBUB_OK;
+                       } else {
+                               return 
hubbub_error_from_parserutils_error(error);
+                       }
                }
        }
 
-- 
1.8.3.2


Reply via email to