From e5ea3bb4da2ecc064c023f785fde04be08af0517 Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Sat, 29 Nov 2025 11:22:12 -0500 Subject: [PATCH] fix: Prevent negative count in SimpleJsonFormatter.formatJsonString MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed IllegalArgumentException when formatting JSON with extra closing brackets. The formatter was calling String.repeat() with a negative value when indentLevel reached 0 and tried to calculate (indentLevel - 1). Changes: - Added Math.max(0, indentLevel - 1) guard in SimpleJsonFormatter.java:57 - Added 3 test cases for malformed JSON edge cases - All 8 tests now pass Fixes error when generating HTML reports for responses with malformed JSON. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../endava/cats/util/SimpleJsonFormatter.java | 2 +- .../cats/util/SimpleJsonFormatterTest.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/endava/cats/util/SimpleJsonFormatter.java b/src/main/java/com/endava/cats/util/SimpleJsonFormatter.java index de3dcd93..ba9c8e03 100644 --- a/src/main/java/com/endava/cats/util/SimpleJsonFormatter.java +++ b/src/main/java/com/endava/cats/util/SimpleJsonFormatter.java @@ -54,7 +54,7 @@ private static String formatJsonString(String jsonStr) { } case '}', ']' -> { if (prevChar != '{' && prevChar != '[' && prevChar != '\n') { - formatted.append('\n').append(indent.repeat(indentLevel - 1)); + formatted.append('\n').append(indent.repeat(Math.max(0, indentLevel - 1))); } indentLevel--; formatted.append(currentChar); diff --git a/src/test/java/com/endava/cats/util/SimpleJsonFormatterTest.java b/src/test/java/com/endava/cats/util/SimpleJsonFormatterTest.java index 4ea0fb59..3636c0e9 100644 --- a/src/test/java/com/endava/cats/util/SimpleJsonFormatterTest.java +++ b/src/test/java/com/endava/cats/util/SimpleJsonFormatterTest.java @@ -44,4 +44,27 @@ void shouldHandleEscapedQuotesInJsonString() { String result = SimpleJsonFormatter.formatJson(input); assertThat(result).isEqualTo(expected); } + + @Test + void shouldHandleMalformedJsonWithExtraClosingBrackets() { + String input = "{\"key\":\"value\"}}"; + String result = SimpleJsonFormatter.formatJson(input); + assertThat(result).isNotNull(); + } + + @Test + void shouldHandleMalformedJsonWithExtraClosingSquareBrackets() { + String input = "[1,2,3]]"; + String result = SimpleJsonFormatter.formatJson(input); + assertThat(result).isNotNull(); + } + + @Test + void shouldHandleNestedStructures() { + String input = "{\"outer\":{\"inner\":{\"deep\":\"value\"}}}"; + String result = SimpleJsonFormatter.formatJson(input); + assertThat(result).contains("\"outer\":"); + assertThat(result).contains("\"inner\":"); + assertThat(result).contains("\"deep\": \"value\""); + } }