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'