diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java index d14889ca..73e5398b 100644 --- a/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java +++ b/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java @@ -38,8 +38,12 @@ public ParsedInline tryParse(InlineParserState inlineParserState) { while (scanner.find('`') > 0) { var beforeClosing = scanner.position(); var length = scanner.matchMultiple('`'); - // Keep track of last position of backticks run of this length - backtickPositions.put(length, beforeClosing); + // Keep track of last position of backticks run of this length. Once the whole input + // has been scanned, the map already holds the last positions, so don't overwrite them + // with earlier ones. + if (!scannedToEnd) { + backtickPositions.put(length, beforeClosing); + } if (length == openingLength) { Code node = new Code(); diff --git a/commonmark/src/test/java/org/commonmark/test/SpecialInputTest.java b/commonmark/src/test/java/org/commonmark/test/SpecialInputTest.java index 8dcdbebe..007b5765 100644 --- a/commonmark/src/test/java/org/commonmark/test/SpecialInputTest.java +++ b/commonmark/src/test/java/org/commonmark/test/SpecialInputTest.java @@ -456,4 +456,11 @@ public void emphasisAfterHardLineBreak() { Foo
"""); } + + @Test + public void codeSpansAfterUnclosedBackticks() { + assertRendering("`` `a` `c`", "`` a c
`` a c e