From: Andrea Marchesini Date: Fri, 11 Nov 2011 18:17:50 +0000 (+0100) Subject: json_load* return NULL if the first argument is NULL X-Git-Tag: v2.4-moonshot~1^2~49^2~2 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=jansson.git;a=commitdiff_plain;h=5ec101ec21d5fec71dcf693e941c90c388430a32 json_load* return NULL if the first argument is NULL --- diff --git a/src/load.c b/src/load.c index d60a93e..3fdec8f 100644 --- a/src/load.c +++ b/src/load.c @@ -867,13 +867,19 @@ json_t *json_loads(const char *string, size_t flags, json_error_t *error) json_t *result; string_data_t stream_data; + jsonp_error_init(error, ""); + + if (string == NULL) { + error_set(error, NULL, "wrong arguments"); + return NULL; + } + stream_data.data = string; stream_data.pos = 0; if(lex_init(&lex, string_get, (void *)&stream_data)) return NULL; - jsonp_error_init(error, ""); result = parse_json(&lex, flags, error); lex_close(&lex); @@ -905,6 +911,13 @@ json_t *json_loadb(const char *buffer, size_t buflen, size_t flags, json_error_t json_t *result; buffer_data_t stream_data; + jsonp_error_init(error, ""); + + if (buffer == NULL) { + error_set(error, NULL, "wrong arguments"); + return NULL; + } + stream_data.data = buffer; stream_data.pos = 0; stream_data.len = buflen; @@ -912,7 +925,6 @@ json_t *json_loadb(const char *buffer, size_t buflen, size_t flags, json_error_t if(lex_init(&lex, buffer_get, (void *)&stream_data)) return NULL; - jsonp_error_init(error, ""); result = parse_json(&lex, flags, error); lex_close(&lex); @@ -925,15 +937,21 @@ json_t *json_loadf(FILE *input, size_t flags, json_error_t *error) const char *source; json_t *result; - if(lex_init(&lex, (get_func)fgetc, input)) - return NULL; - if(input == stdin) source = ""; else source = ""; jsonp_error_init(error, source); + + if (input == NULL) { + error_set(error, NULL, "wrong arguments"); + return NULL; + } + + if(lex_init(&lex, (get_func)fgetc, input)) + return NULL; + result = parse_json(&lex, flags, error); lex_close(&lex); @@ -947,6 +965,11 @@ json_t *json_load_file(const char *path, size_t flags, json_error_t *error) jsonp_error_init(error, path); + if (path == NULL) { + error_set(error, NULL, "wrong arguments"); + return NULL; + } + fp = fopen(path, "rb"); if(!fp) { diff --git a/test/suites/api/test_load.c b/test/suites/api/test_load.c index d60869d..810b745 100644 --- a/test/suites/api/test_load.c +++ b/test/suites/api/test_load.c @@ -50,9 +50,32 @@ static void disable_eof_check() json_decref(json); } +static void load_wrong_args() +{ + json_t *json; + json_error_t error; + + json = json_loads(NULL, 0, &error); + if (json) + fail("json_loads should return NULL if the first argument is NULL"); + + json = json_loadb(NULL, 0, 0, &error); + if (json) + fail("json_loadb should return NULL if the first argument is NULL"); + + json = json_loadf(NULL, 0, &error); + if (json) + fail("json_loadf should return NULL if the first argument is NULL"); + + json = json_load_file(NULL, 0, &error); + if (json) + fail("json_loadf should return NULL if the first argument is NULL"); +} + static void run_tests() { file_not_found(); reject_duplicates(); disable_eof_check(); + load_wrong_args(); }