summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Haszlakiewicz <erh+git@nimenees.com>2014-04-19 20:33:05 -0400
committerEric Haszlakiewicz <erh+git@nimenees.com>2014-04-19 20:33:05 -0400
commit2149a04ca82dfa7568e010b875409c56cb7e6e55 (patch)
tree034f0e30b48df8d90a01d06671a6c8beb7e20a5d
parent92a7740e901cfa520fd0cb21117b11b17a78b07c (diff)
Check for failures when allocating memory; return NULL and set errno=ENOMEM in a few of those cases.
Thanks to Susant Sahani for pointing out some of these.
-rw-r--r--json_object.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/json_object.c b/json_object.c
index c29a5f4..8ed0239 100644
--- a/json_object.c
+++ b/json_object.c
@@ -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;