aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/load.c10
-rw-r--r--test/testdata/invalid11
2 files changed, 21 insertions, 0 deletions
diff --git a/src/load.c b/src/load.c
index 88cd1f0..25df182 100644
--- a/src/load.c
+++ b/src/load.c
@@ -805,7 +805,17 @@ json_t *json_loadf(FILE *input, json_error_t *error)
return NULL;
result = parse_json(&lex, error);
+ if(!result)
+ goto out;
+
+ lex_scan(&lex, error);
+ if(lex.token != TOKEN_EOF) {
+ error_set(error, &lex, "end of file expected");
+ json_decref(result);
+ result = NULL;
+ }
+out:
lex_close(&lex);
return result;
}
diff --git a/test/testdata/invalid b/test/testdata/invalid
index bdca8a5..2887692 100644
--- a/test/testdata/invalid
+++ b/test/testdata/invalid
@@ -182,3 +182,14 @@ aƄ
====
1
'[' or '{' expected near 'a'
+==== garbage-at-the-end ====
+[1,2,3]foo
+====
+1
+end of file expected near 'foo'
+==== garbage-after-newline ====
+[1,2,3]
+foo
+====
+2
+end of file expected near 'foo'