diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java index babcb90f..9d89b82b 100644 --- a/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java +++ b/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java @@ -164,17 +164,13 @@ private boolean tryProcessingInstruction(Scanner scanner) { return false; } scanner.next(); - int found; - while ((found = scanner.find('?')) > 0) { + while (scanner.find('?') >= 0) { scanner.next(); if (scanner.next('>')) { return true; } } - // The loop also ends when a `?` is found directly at the current position (`found == 0`), - // which is not the end of the input, so only remember the miss when the scan really did - // reach the end. - noProcessingInstructionEnd = found < 0; + noProcessingInstructionEnd = true; return false; } diff --git a/commonmark/src/test/java/org/commonmark/test/HtmlInlineParserTest.java b/commonmark/src/test/java/org/commonmark/test/HtmlInlineParserTest.java index 454c1de8..80520c92 100644 --- a/commonmark/src/test/java/org/commonmark/test/HtmlInlineParserTest.java +++ b/commonmark/src/test/java/org/commonmark/test/HtmlInlineParserTest.java @@ -21,11 +21,17 @@ public void cdata() { assertRendering("inline ", "
inline
\n"); } + @Test + public void processingInstruction() { + assertRendering("inline ?>", "inline ?>
\n"); + assertRendering("inline ", "inline
\n"); + assertRendering("inline ? ", "inline ?
\n"); + } + @Test public void afterFailedAttempt() { // A `<` that doesn't start inline HTML must not stop a later one from being parsed assertRendering("inline ", "inline <!-
\n"); - assertRendering("inline ? ", "inline <??
\n"); assertRendering( "inline ", "inline <![x]]>
\n"); assertRendering("inline ", "inline <!foo>
\n");