From 3789a9c751ed21ab2463ae5cdbe643ac853eaa7e Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Wed, 2 Aug 2023 20:01:56 +0000 Subject: [PATCH 1/4] Fix number wrap around bug Signed-off-by: Arthur Chan --- src/main/java/org/fusesource/jansi/Ansi.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/org/fusesource/jansi/Ansi.java b/src/main/java/org/fusesource/jansi/Ansi.java index 8c04569a..7221d96b 100644 --- a/src/main/java/org/fusesource/jansi/Ansi.java +++ b/src/main/java/org/fusesource/jansi/Ansi.java @@ -706,10 +706,16 @@ public Ansi eraseLine(final Erase kind) { } public Ansi scrollUp(final int rows) { + if (rows == Integer.MIN_VALUE) { + return sctollDown(Integer.MAX_VALUE); + } return rows > 0 ? appendEscapeSequence('S', rows) : rows < 0 ? scrollDown(-rows) : this; } public Ansi scrollDown(final int rows) { + if (rows == Integer.MIN_VALUE) { + return sctollUp(Integer.MAX_VALUE); + } return rows > 0 ? appendEscapeSequence('T', rows) : rows < 0 ? scrollUp(-rows) : this; } From 1e54c06dc832886c3d473b0e7f2644c247b04e73 Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Tue, 22 Aug 2023 14:05:29 +0000 Subject: [PATCH 2/4] Fix typo Signed-off-by: Arthur Chan --- src/main/java/org/fusesource/jansi/Ansi.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/fusesource/jansi/Ansi.java b/src/main/java/org/fusesource/jansi/Ansi.java index 7221d96b..24896b4b 100644 --- a/src/main/java/org/fusesource/jansi/Ansi.java +++ b/src/main/java/org/fusesource/jansi/Ansi.java @@ -707,14 +707,14 @@ public Ansi eraseLine(final Erase kind) { public Ansi scrollUp(final int rows) { if (rows == Integer.MIN_VALUE) { - return sctollDown(Integer.MAX_VALUE); + return scrollDown(Integer.MAX_VALUE); } return rows > 0 ? appendEscapeSequence('S', rows) : rows < 0 ? scrollDown(-rows) : this; } public Ansi scrollDown(final int rows) { if (rows == Integer.MIN_VALUE) { - return sctollUp(Integer.MAX_VALUE); + return scrollUp(Integer.MAX_VALUE); } return rows > 0 ? appendEscapeSequence('T', rows) : rows < 0 ? scrollUp(-rows) : this; } From 47532920049513228bc273c767299ccbf3ae4d58 Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Tue, 22 Aug 2023 14:54:06 +0000 Subject: [PATCH 3/4] Add unit test Signed-off-by: Arthur Chan --- .../java/org/fusesource/jansi/AnsiTest.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/fusesource/jansi/AnsiTest.java b/src/test/java/org/fusesource/jansi/AnsiTest.java index 5c8778d6..64003af0 100644 --- a/src/test/java/org/fusesource/jansi/AnsiTest.java +++ b/src/test/java/org/fusesource/jansi/AnsiTest.java @@ -21,6 +21,7 @@ import org.junit.jupiter.params.provider.CsvSource; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; /** * Tests for the {@link Ansi} class. @@ -64,6 +65,32 @@ public void apply(Ansi ansi) { }).toString()); } + @ParameterizedTest + @CsvSource({ + "-2147483648,ESC[2147483647T", "2147483647,ESC[2147483647S", + "-100000,ESC[100000T", "100000,ESC[100000S" + }) + public void testScrollUp(int x, String expected) { + try { + assertAnsi(expected, Ansi.ansi().scrollUp(x)); + } catch (StackOverflowError e) { + fail("Infinite loop detected."); + } + } + + @ParameterizedTest + @CsvSource({ + "-2147483648,ESC[2147483647S", "2147483647,ESC[2147483647T", + "-100000,ESC[100000S", "100000,ESC[100000T" + }) + public void testScrollDown(int x, String expected) { + try { + assertAnsi(expected, Ansi.ansi().scrollDown(x)); + } catch (StackOverflowError e) { + fail("Infinite loop detected."); + } + } + @ParameterizedTest @CsvSource({ "-1,-1,ESC[1;1H", "-1,0,ESC[1;1H", "-1,1,ESC[1;1H", "-1,2,ESC[1;2H", @@ -152,4 +179,4 @@ public void testColorDisabled() { private static void assertAnsi(String expected, Ansi actual) { assertEquals(expected.replace("ESC", "\033"), actual.toString()); } -} \ No newline at end of file +} From 71cd3b7540c936e44c794d5e629544e4cf1a19dc Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Fri, 25 Aug 2023 10:42:43 +0000 Subject: [PATCH 4/4] Fix test cases Signed-off-by: Arthur Chan --- src/test/java/org/fusesource/jansi/AnsiTest.java | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/test/java/org/fusesource/jansi/AnsiTest.java b/src/test/java/org/fusesource/jansi/AnsiTest.java index 64003af0..36da577c 100644 --- a/src/test/java/org/fusesource/jansi/AnsiTest.java +++ b/src/test/java/org/fusesource/jansi/AnsiTest.java @@ -21,7 +21,6 @@ import org.junit.jupiter.params.provider.CsvSource; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; /** * Tests for the {@link Ansi} class. @@ -71,11 +70,7 @@ public void apply(Ansi ansi) { "-100000,ESC[100000T", "100000,ESC[100000S" }) public void testScrollUp(int x, String expected) { - try { - assertAnsi(expected, Ansi.ansi().scrollUp(x)); - } catch (StackOverflowError e) { - fail("Infinite loop detected."); - } + assertAnsi(expected, Ansi.ansi().scrollUp(x)); } @ParameterizedTest @@ -84,11 +79,7 @@ public void testScrollUp(int x, String expected) { "-100000,ESC[100000S", "100000,ESC[100000T" }) public void testScrollDown(int x, String expected) { - try { - assertAnsi(expected, Ansi.ansi().scrollDown(x)); - } catch (StackOverflowError e) { - fail("Infinite loop detected."); - } + assertAnsi(expected, Ansi.ansi().scrollDown(x)); } @ParameterizedTest