mirror of
https://github.com/fankes/JSON-java-compat.git
synced 2025-09-08 03:24:27 +08:00
Generalize the logic to disallow nested objects and arrays as keys in objects.
Fixes #771.
This commit is contained in:
@@ -208,22 +208,14 @@ public class JSONObject {
|
||||
throw x.syntaxError("A JSONObject text must begin with '{'");
|
||||
}
|
||||
for (;;) {
|
||||
char prev = x.getPrevious();
|
||||
c = x.nextClean();
|
||||
switch (c) {
|
||||
case 0:
|
||||
throw x.syntaxError("A JSONObject text must end with '}'");
|
||||
case '}':
|
||||
return;
|
||||
case '{':
|
||||
case '[':
|
||||
if(prev=='{') {
|
||||
throw x.syntaxError("A JSON Object can not directly nest another JSON Object or JSON Array.");
|
||||
}
|
||||
// fall through
|
||||
default:
|
||||
x.back();
|
||||
key = x.nextValue().toString();
|
||||
key = x.nextSimpleValue(c).toString();
|
||||
}
|
||||
|
||||
// The key is followed by ':'.
|
||||
@@ -1712,12 +1704,12 @@ public class JSONObject {
|
||||
final Object result = method.invoke(bean);
|
||||
if (result != null) {
|
||||
// check cyclic dependency and throw error if needed
|
||||
// the wrap and populateMap combination method is
|
||||
// the wrap and populateMap combination method is
|
||||
// itself DFS recursive
|
||||
if (objectsRecord.contains(result)) {
|
||||
throw recursivelyDefinedObjectException(key);
|
||||
}
|
||||
|
||||
|
||||
objectsRecord.add(result);
|
||||
|
||||
this.map.put(key, wrap(result, objectsRecord));
|
||||
@@ -1726,7 +1718,7 @@ public class JSONObject {
|
||||
|
||||
// we don't use the result anywhere outside of wrap
|
||||
// if it's a resource we should be sure to close it
|
||||
// after calling toString
|
||||
// after calling toString
|
||||
if (result instanceof Closeable) {
|
||||
try {
|
||||
((Closeable) result).close();
|
||||
|
Reference in New Issue
Block a user