]> git.ipfire.org Git - thirdparty/json-c.git/commitdiff
Check for failures when allocating memory; return NULL and set errno=ENOMEM in a...
authorEric Haszlakiewicz <erh+git@nimenees.com>
Sun, 20 Apr 2014 00:33:05 +0000 (20:33 -0400)
committerEric Haszlakiewicz <erh+git@nimenees.com>
Sun, 20 Apr 2014 00:33:05 +0000 (20:33 -0400)
Thanks to Susant Sahani for pointing out some of these.

json_object.c

index c29a5f4a11e4e5fdfe8f63362d0f087f8e886021..8ed02398fb370ea834c6a27e56e2c8edc075df1d 100644 (file)
@@ -374,6 +374,12 @@ struct json_object* json_object_new_object(void)
        jso->_to_json_string = &json_object_object_to_json_string;
        jso->o.c_object = lh_kchar_table_new(JSON_OBJECT_DEF_HASH_ENTRIES,
                                        NULL, &json_object_lh_entry_free);
+       if (!jso->o.c_object)
+       {
+               json_object_generic_delete(jso);
+               errno = ENOMEM;
+               return NULL;
+       }
        return jso;
 }
 
@@ -640,8 +646,15 @@ struct json_object* json_object_new_double_s(double d, const char *ds)
        if (!jso)
                return NULL;
 
+       char *new_ds = strdup(ds);
+       if (!new_ds)
+       {
+               json_object_generic_delete(jso);
+               errno = ENOMEM;
+               return NULL;
+       }
        json_object_set_serializer(jso, json_object_userdata_to_json_string,
-           strdup(ds), json_object_free_userdata);
+           new_ds, json_object_free_userdata);
        return jso;
 }
 
@@ -735,6 +748,12 @@ struct json_object* json_object_new_string(const char *s)
        jso->_delete = &json_object_string_delete;
        jso->_to_json_string = &json_object_string_to_json_string;
        jso->o.c_string.str = strdup(s);
+       if (!jso->o.c_string.str)
+       {
+               json_object_generic_delete(jso);
+               errno = ENOMEM;
+               return NULL;
+       }
        jso->o.c_string.len = strlen(s);
        return jso;
 }
@@ -747,6 +766,12 @@ struct json_object* json_object_new_string_len(const char *s, int len)
        jso->_delete = &json_object_string_delete;
        jso->_to_json_string = &json_object_string_to_json_string;
        jso->o.c_string.str = (char*)malloc(len + 1);
+       if (!jso->o.c_string.str)
+       {
+               json_object_generic_delete(jso);
+               errno = ENOMEM;
+               return NULL;
+       }
        memcpy(jso->o.c_string.str, (void *)s, len);
        jso->o.c_string.str[len] = '\0';
        jso->o.c_string.len = len;