From ccc355d80e58e0959ec0c6eed03aa46e73c23441 Mon Sep 17 00:00:00 2001 From: iska Date: Sat, 1 Nov 2014 22:24:32 +0100 Subject: [PATCH] Replace unconsuming with a location mark in the current character in After DOCTYPE Name state to avoid consuming the character twice Otherwise the parse error would be emitted multiple times if it is an invalid or unexpected character --- HTMLKit/HTMLTokenizer.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/HTMLKit/HTMLTokenizer.m b/HTMLKit/HTMLTokenizer.m index 2fa01f1..a30f535 100644 --- a/HTMLKit/HTMLTokenizer.m +++ b/HTMLKit/HTMLTokenizer.m @@ -1900,13 +1900,14 @@ break; default: { + [_inputStreamReader markCurrentLocation]; [_inputStreamReader unconsumeCurrentInputCharacter]; if ([_inputStreamReader consumeString:@"PUBLIC" caseSensitive:NO]) { [self switchToState:HTMLTokenizerStateAfterDOCTYPEPublicKeyword]; } else if ([_inputStreamReader consumeString:@"SYSTEM" caseSensitive:NO]) { [self switchToState:HTMLTokenizerStateAfterDOCTYPESystemKeyword]; } else { - [_inputStreamReader consumeNextInputCharacter]; + [_inputStreamReader rewindToMarkedLocation]; [self emitParseError:@"Unexpected character (%@) in After DOCTYPE Name state", StringFromUTF32Char(character)]; _currentDoctypeToken.forceQuirks = YES; [self switchToState:HTMLTokenizerStateBogusDOCTYPE];