mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Detect trailing commas and colons inside arrays and hashes.
This commit is contained in:
+13
-7
@@ -103,7 +103,7 @@ static void string_free(struct string *s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
json_object *json_parse(FILE *f, json_object *current, char **error) {
|
json_object *json_parse(FILE *f, json_object *current, char **error) {
|
||||||
int current_is_container = 0;
|
int current_is = 0;
|
||||||
int c;
|
int c;
|
||||||
again:
|
again:
|
||||||
c = getc(f);
|
c = getc(f);
|
||||||
@@ -129,7 +129,7 @@ again:
|
|||||||
|
|
||||||
if (c == '[') {
|
if (c == '[') {
|
||||||
current = add_object(JSON_ARRAY, current, error);
|
current = add_object(JSON_ARRAY, current, error);
|
||||||
current_is_container = 1;
|
current_is = '[';
|
||||||
goto again;
|
goto again;
|
||||||
} else if (c == ']') {
|
} else if (c == ']') {
|
||||||
if (current == NULL) {
|
if (current == NULL) {
|
||||||
@@ -137,8 +137,11 @@ again:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (current_is_container) { // Empty array
|
if (current_is == '[') { // Empty array
|
||||||
return current;
|
return current;
|
||||||
|
} else if (current_is) {
|
||||||
|
*error = "Found ] without final element";
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (current->parent == NULL || current->parent->type != JSON_ARRAY) {
|
if (current->parent == NULL || current->parent->type != JSON_ARRAY) {
|
||||||
@@ -153,7 +156,7 @@ again:
|
|||||||
|
|
||||||
if (c == '{') {
|
if (c == '{') {
|
||||||
current = add_object(JSON_HASH, current, error);
|
current = add_object(JSON_HASH, current, error);
|
||||||
current_is_container = 1;
|
current_is = '{';
|
||||||
goto again;
|
goto again;
|
||||||
} else if (c == '}') {
|
} else if (c == '}') {
|
||||||
if (current == NULL) {
|
if (current == NULL) {
|
||||||
@@ -161,8 +164,11 @@ again:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (current_is_container) { // Empty hash
|
if (current_is == '{') { // Empty hash
|
||||||
return current;
|
return current;
|
||||||
|
} else if (current_is) {
|
||||||
|
*error = "Found } without final element";
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (current->parent == NULL || current->parent->type != JSON_HASH) {
|
if (current->parent == NULL || current->parent->type != JSON_HASH) {
|
||||||
@@ -224,7 +230,7 @@ again:
|
|||||||
}
|
}
|
||||||
|
|
||||||
current = current->parent;
|
current = current->parent;
|
||||||
current_is_container = 1;
|
current_is = ',';
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,7 +252,7 @@ again:
|
|||||||
}
|
}
|
||||||
|
|
||||||
current = current->parent;
|
current = current->parent;
|
||||||
current_is_container = 1;
|
current_is = ':';
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user