diff --git a/src/load.c b/src/load.c index 339adfa..deb36f3 100644 --- a/src/load.c +++ b/src/load.c @@ -122,6 +122,10 @@ static void error_set(json_error_t *error, const lex_t *lex, } else { + if(code == json_error_invalid_syntax) { + /* More specific error code for premature end of file. */ + code = json_error_premature_end_of_input; + } if(lex->stream.state == STREAM_STATE_ERROR) { /* No context for UTF-8 decoding errors */ result = msg_text; diff --git a/test/suites/api/test_load.c b/test/suites/api/test_load.c index a708de5..a3bdc57 100644 --- a/test/suites/api/test_load.c +++ b/test/suites/api/test_load.c @@ -221,6 +221,14 @@ static void error_code() fail("error.text longer than expected"); if(json_error_code(&error) != json_error_end_of_input_expected) fail("json_loads returned incorrect error code"); + + json = json_loads("{\"foo\": ", 0, &error); + if(json != NULL) + fail("json_loads returned not NULL"); + if(strlen(error.text) >= JSON_ERROR_TEXT_LENGTH) + fail("error.text longer than expected"); + if(json_error_code(&error) != json_error_premature_end_of_input) + fail("json_loads returned incorrect error code"); } static void run_tests()