From 7f0136f8c6f79b64ddfe1abc8aec3813bfdf9668 Mon Sep 17 00:00:00 2001 From: Joowon-Seo Date: Fri, 20 Mar 2026 01:12:35 +0900 Subject: [PATCH 1/2] Add boundary tests for JsonValueWriter max nesting depth Verify behavior at the maxNestingDepth boundary. Signed-off-by: Joowon-Seo See gh-49662 --- .../boot/json/JsonValueWriterTests.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java index 10ebb94ce10..d38db8d9889 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java @@ -296,6 +296,38 @@ class JsonValueWriterTests { "JSON nesting depth (129) exceeds maximum depth of 128 (current path: [0][0][0][0][0][0][0][0][0][0][0][0]"); } + @Test + void shouldAllowStartingObjectWhenCurrentDepthIsMaxDepth() { + StringBuilder out = new StringBuilder(); + JsonValueWriter writer = new JsonValueWriter(out, 2); + + writer.start(Series.OBJECT); + writer.start(Series.OBJECT); + writer.start(Series.OBJECT); + + writer.end(Series.OBJECT); + writer.end(Series.OBJECT); + writer.end(Series.OBJECT); + + assertThat(out).hasToString("{{{}}}"); + } + + @Test + void shouldAllowStartingArrayWhenCurrentDepthIsMaxDepth() { + StringBuilder out = new StringBuilder(); + JsonValueWriter writer = new JsonValueWriter(out, 2); + + writer.start(Series.ARRAY); + writer.start(Series.ARRAY); + writer.start(Series.ARRAY); + + writer.end(Series.ARRAY); + writer.end(Series.ARRAY); + writer.end(Series.ARRAY); + + assertThat(out).hasToString("[[[]]]"); + } + private String write(V value) { return doWrite((valueWriter) -> valueWriter.write(value)); } From 371746826e3a3e4ccb57eef500fb4316568790f2 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 19 Mar 2026 18:26:28 +0000 Subject: [PATCH 2/2] Polish "Add boundary tests for JsonValueWriter max nesting depth" See gh-49662 --- .../org/springframework/boot/json/JsonValueWriterTests.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java index d38db8d9889..1488e6ea366 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java @@ -300,15 +300,12 @@ class JsonValueWriterTests { void shouldAllowStartingObjectWhenCurrentDepthIsMaxDepth() { StringBuilder out = new StringBuilder(); JsonValueWriter writer = new JsonValueWriter(out, 2); - writer.start(Series.OBJECT); writer.start(Series.OBJECT); writer.start(Series.OBJECT); - writer.end(Series.OBJECT); writer.end(Series.OBJECT); writer.end(Series.OBJECT); - assertThat(out).hasToString("{{{}}}"); } @@ -316,15 +313,12 @@ class JsonValueWriterTests { void shouldAllowStartingArrayWhenCurrentDepthIsMaxDepth() { StringBuilder out = new StringBuilder(); JsonValueWriter writer = new JsonValueWriter(out, 2); - writer.start(Series.ARRAY); writer.start(Series.ARRAY); writer.start(Series.ARRAY); - writer.end(Series.ARRAY); writer.end(Series.ARRAY); writer.end(Series.ARRAY); - assertThat(out).hasToString("[[[]]]"); }