From afc3109604b16b5ff20ad26b4ec2b122d31f1352 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Fri, 21 Jun 2024 15:37:00 -0700 Subject: [PATCH] Fix #657: track nesting depth (#658) --- release-notes/VERSION-2.x | 6 ++++++ .../jackson/dataformat/xml/deser/XmlReadContext.java | 2 ++ .../jackson/dataformat/xml/stream/XmlParserTest.java | 6 ++++++ 3 files changed, 14 insertions(+) diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 4926d16b4..191203db4 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -8,6 +8,12 @@ Project: jackson-dataformat-xml No changes since 2.17 +2.17.2 (not yet released) + +#657: Nesting depth in `XmlReadContext` is not incremented/decremented on + JsonToken.START_OBJECT/JsonToken.END_OBJECT + (reported by @AlexUg) + 2.17.1 (04-May-2024) #646: Deserializing fails when using builder classes with `Iterable` Collection setters diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/XmlReadContext.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/XmlReadContext.java index bfef7d4db..34e34d239 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/XmlReadContext.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/XmlReadContext.java @@ -66,6 +66,7 @@ public XmlReadContext(XmlReadContext parent, int type, int lineNr, int colNr) _lineNr = lineNr; _columnNr = colNr; _index = -1; + _nestingDepth = parent == null ? 0 : parent._nestingDepth + 1; } protected final void reset(int type, int lineNr, int colNr) @@ -77,6 +78,7 @@ protected final void reset(int type, int lineNr, int colNr) _currentName = null; _currentValue = null; _namesToWrap = null; + // _nestingDepth fine as is, same level for reuse } @Override diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/stream/XmlParserTest.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/stream/XmlParserTest.java index c19d58868..12a8fcb1e 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/stream/XmlParserTest.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/stream/XmlParserTest.java @@ -30,13 +30,19 @@ public void testSimplest() throws Exception // -> "{\"leaf\":\"abc\"}" try (JsonParser p = _xmlMapper.createParser(XML)) { + assertEquals(0, p.getParsingContext().getNestingDepth()); assertToken(JsonToken.START_OBJECT, p.nextToken()); + assertEquals(1, p.getParsingContext().getNestingDepth()); assertToken(JsonToken.FIELD_NAME, p.nextToken()); assertEquals("leaf", p.currentName()); + assertEquals(1, p.getParsingContext().getNestingDepth()); assertToken(JsonToken.VALUE_STRING, p.nextToken()); assertEquals("abc", p.getText()); + assertEquals(1, p.getParsingContext().getNestingDepth()); assertToken(JsonToken.END_OBJECT, p.nextToken()); + assertEquals(0, p.getParsingContext().getNestingDepth()); assertNull(p.nextToken()); + assertEquals(0, p.getParsingContext().getNestingDepth()); } }