Skip to content

Commit da91cde

Browse files
committed
Protect against deeply nested JSON maps
See gh-31868
1 parent 4132414 commit da91cde

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class BasicJsonParser extends AbstractJsonParser {
4242

4343
@Override
4444
public Map<String, Object> parseMap(String json) {
45-
return tryParse(() -> parseMap(json, this::parseMapInternal), Exception.class);
45+
return tryParse(() -> parseMap(json, (jsonToParse) -> parseMapInternal(0, jsonToParse)), Exception.class);
4646
}
4747

4848
@Override
@@ -67,7 +67,7 @@ private Object parseInternal(int nesting, String json) {
6767
return parseListInternal(nesting + 1, json);
6868
}
6969
if (json.startsWith("{")) {
70-
return parseMapInternal(json);
70+
return parseMapInternal(nesting, json);
7171
}
7272
if (json.startsWith("\"")) {
7373
return trimTrailingCharacter(trimLeadingCharacter(json, '"'), '"');
@@ -87,15 +87,15 @@ private Object parseInternal(int nesting, String json) {
8787
return json;
8888
}
8989

90-
private Map<String, Object> parseMapInternal(String json) {
90+
private Map<String, Object> parseMapInternal(int nesting, String json) {
9191
Map<String, Object> map = new LinkedHashMap<>();
9292
json = trimLeadingCharacter(trimTrailingCharacter(json, '}'), '{').trim();
9393
for (String pair : tokenize(json)) {
9494
String[] values = StringUtils.trimArrayElements(StringUtils.split(pair, ":"));
9595
Assert.state(values[0].startsWith("\"") && values[0].endsWith("\""),
9696
"Expecting double-quotes around field names");
9797
String key = trimLeadingCharacter(trimTrailingCharacter(values[0], '"'), '"');
98-
Object value = parseInternal(0, values[1]);
98+
Object value = parseInternal(nesting, values[1]);
9999
map.put(key, value);
100100
}
101101
return map;

0 commit comments

Comments
 (0)