Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -996,6 +996,7 @@ public String nextStringValue() throws JacksonException
break;
case XmlTokenStream.XML_END:
_updateTokenToNull();
break;
default:
return _internalErrorUnknownToken(token);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import tools.jackson.dataformat.xml.deser.FromXmlParser;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;

public class XmlParserNextXxxTest extends XmlTestUtil
{
Expand Down Expand Up @@ -43,4 +44,26 @@ public void testXmlAttributesWithNextTextValue() throws Exception
assertToken(JsonToken.END_OBJECT, xp.nextToken()); // </data>
xp.close();
}

// nextStringValue() must honor the JsonParser contract at end of input:
// return null, same as nextToken() does, instead of leaking an unchecked
// IllegalStateException from the internal XML_END branch.
@Test
public void testNextStringValueAtEndOfInput() throws Exception
{
final String XML = "<data max=\"7\" offset=\"9\"/>";

JsonParser xp = xmlMapper(false).createParser(XML);

assertToken(JsonToken.START_OBJECT, xp.nextToken()); // <data>
assertToken(JsonToken.PROPERTY_NAME, xp.nextToken()); // max
assertEquals("7", xp.nextStringValue());
assertToken(JsonToken.PROPERTY_NAME, xp.nextToken()); // offset
assertEquals("9", xp.nextStringValue());
assertToken(JsonToken.END_OBJECT, xp.nextToken()); // </data>

// One more call past the end: should quietly report end-of-input
assertNull(xp.nextStringValue());
xp.close();
}
}
Loading