Merge branch '2.2'
authorPetri Lehtinen <petri@digip.org>
Mon, 14 Nov 2011 19:11:18 +0000 (21:11 +0200)
committerPetri Lehtinen <petri@digip.org>
Mon, 14 Nov 2011 19:11:18 +0000 (21:11 +0200)
Closes GH-43.

1  2 
src/load.c
test/suites/api/test_load.c

diff --combined src/load.c
@@@ -820,11 -820,9 +820,11 @@@ static json_t *parse_json(lex_t *lex, s
      json_t *result;
  
      lex_scan(lex, error);
 -    if(lex->token != '[' && lex->token != '{') {
 -        error_set(error, lex, "'[' or '{' expected");
 -        return NULL;
 +    if(!(flags & JSON_DECODE_ANY)) {
 +        if(lex->token != '[' && lex->token != '{') {
 +            error_set(error, lex, "'[' or '{' expected");
 +            return NULL;
 +        }
      }
  
      result = parse_value(lex, flags, error);
@@@ -869,13 -867,19 +869,19 @@@ json_t *json_loads(const char *string, 
      json_t *result;
      string_data_t stream_data;
  
+     jsonp_error_init(error, "<string>");
+     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, "<string>");
      result = parse_json(&lex, flags, error);
  
      lex_close(&lex);
@@@ -907,6 -911,13 +913,13 @@@ json_t *json_loadb(const char *buffer, 
      json_t *result;
      buffer_data_t stream_data;
  
+     jsonp_error_init(error, "<buffer>");
+     if (buffer == NULL) {
+         error_set(error, NULL, "wrong arguments");
+         return NULL;
+     }
      stream_data.data = buffer;
      stream_data.pos = 0;
      stream_data.len = buflen;
      if(lex_init(&lex, buffer_get, (void *)&stream_data))
          return NULL;
  
-     jsonp_error_init(error, "<buffer>");
      result = parse_json(&lex, flags, error);
  
      lex_close(&lex);
@@@ -927,15 -937,21 +939,21 @@@ json_t *json_loadf(FILE *input, size_t 
      const char *source;
      json_t *result;
  
-     if(lex_init(&lex, (get_func)fgetc, input))
-         return NULL;
      if(input == stdin)
          source = "<stdin>";
      else
          source = "<stream>";
  
      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);
@@@ -949,6 -965,11 +967,11 @@@ json_t *json_load_file(const char *path
  
      jsonp_error_init(error, path);
  
+     if (path == NULL) {
+         error_set(error, NULL, "wrong arguments");
+         return NULL;
+     }
      fp = fopen(path, "rb");
      if(!fp)
      {
@@@ -50,36 -50,32 +50,59 @@@ static void disable_eof_check(
      json_decref(json);
  }
  
 +static void decode_any()
 +{
 +    json_t *json;
 +    json_error_t error;
 +
 +    json = json_loads("\"foo\"", JSON_DECODE_ANY, &error);
 +    if (!json || !json_is_string(json))
 +        fail("json_load decoded any failed - string");
 +    json_decref(json);
 +
 +    json = json_loads("42", JSON_DECODE_ANY, &error);
 +    if (!json || !json_is_integer(json))
 +        fail("json_load decoded any failed - integer");
 +    json_decref(json);
 +
 +    json = json_loads("true", JSON_DECODE_ANY, &error);
 +    if (!json || !json_is_true(json))
 +        fail("json_load decoded any failed - boolean");
 +    json_decref(json);
 +
 +    json = json_loads("null", JSON_DECODE_ANY, &error);
 +    if (!json || !json_is_null(json))
 +        fail("json_load decoded any failed - null");
 +    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();
 +    decode_any();
+     load_wrong_args();
  }