From 58260c6ce08c203e342df7d221c9902ada230d8c Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Fri, 25 Aug 2023 15:45:47 +0100 Subject: [PATCH] Fix invalid string input (#253) Signed-off-by: Arthur Chan Co-authored-by: Guillaume Nodet --- src/main/java/org/fusesource/jansi/AnsiRenderer.java | 5 +++++ src/test/java/org/fusesource/jansi/AnsiRendererTest.java | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/fusesource/jansi/AnsiRenderer.java b/src/main/java/org/fusesource/jansi/AnsiRenderer.java index 20b1c179..5041c4ee 100644 --- a/src/main/java/org/fusesource/jansi/AnsiRenderer.java +++ b/src/main/java/org/fusesource/jansi/AnsiRenderer.java @@ -99,6 +99,11 @@ public static Appendable render(final String input, Appendable target) throws IO return target; } j += BEGIN_TOKEN_LEN; + + // Check for invalid string with END_TOKEN before BEGIN_TOKEN + if (k < j) { + throw new IllegalArgumentException("Invalid input string found."); + } String spec = input.substring(j, k); String[] items = spec.split(CODE_TEXT_SEPARATOR, 2); diff --git a/src/test/java/org/fusesource/jansi/AnsiRendererTest.java b/src/test/java/org/fusesource/jansi/AnsiRendererTest.java index 05602bdb..63dfaba8 100644 --- a/src/test/java/org/fusesource/jansi/AnsiRendererTest.java +++ b/src/test/java/org/fusesource/jansi/AnsiRendererTest.java @@ -24,6 +24,7 @@ import static org.fusesource.jansi.AnsiRenderer.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; /** @@ -31,7 +32,6 @@ * */ public class AnsiRendererTest { - @BeforeAll static void setUp() { Ansi.setEnabled(true); @@ -112,6 +112,11 @@ public void testRenderInvalidMissingEnd() { assertEquals("@|bold foo", str); } + @Test + public void testRenderInvalidEndBeforeStart() { + assertThrows(IllegalArgumentException.class, () -> render("@|@")); + } + @Test public void testRenderInvalidMissingText() { String str = render("@|bold|@");