Skip to content

Commit 678591b

Browse files
committed
JAVA-2500: Ensure that JsonReader.visitDateTimeExtendedJson always consumes the END_OBJECT token
1 parent 50d6e3b commit 678591b

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

bson/src/main/org/bson/json/JsonReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -984,7 +984,7 @@ private long visitDateTimeExtendedJson() {
984984
verifyToken(JsonTokenType.END_OBJECT);
985985
} else {
986986
if (valueToken.getType() == JsonTokenType.INT32 || valueToken.getType() == JsonTokenType.INT64) {
987-
return valueToken.getValue(Long.class);
987+
value = valueToken.getValue(Long.class);
988988
} else if (valueToken.getType() == JsonTokenType.STRING) {
989989
String dateTimeString = valueToken.getValue(String.class);
990990
try {

bson/src/test/unit/org/bson/json/JsonReaderTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,16 @@ public void testDateTimeStrict() {
146146
assertEquals(AbstractBsonReader.State.DONE, bsonReader.getState());
147147
}
148148

149+
@Test
150+
public void testNestedDateTimeStrict() {
151+
String json = "{d1 : { \"$date\" : 0 }, d2 : { \"$date\" : 1 } }";
152+
bsonReader = new JsonReader(json);
153+
bsonReader.readStartDocument();
154+
assertEquals(0L, bsonReader.readDateTime("d1"));
155+
assertEquals(1L, bsonReader.readDateTime("d2"));
156+
bsonReader.readEndDocument();
157+
}
158+
149159
@Test
150160
public void testDateTimeISOString() {
151161
String json = "{ \"$date\" : \"2015-04-16T14:55:57.626Z\" }";

0 commit comments

Comments
 (0)