From 1f019ceea1ed39286e6bccfb3ff936c22fe0f7c0 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Tue, 21 Jun 2016 17:19:10 +0200 Subject: Fix various memory management issues Consistently handle allocation failures. Some functions are changed to return bool or int instead of void to allow returning an error. Also fix a buffer size miscalculation in lua/uloop and use _exit() instead of exit() on errors after forking. Signed-off-by: Matthias Schiffer --- json_script.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'json_script.c') diff --git a/json_script.c b/json_script.c index b5d414d..463aac8 100644 --- a/json_script.c +++ b/json_script.c @@ -45,6 +45,9 @@ json_script_file_from_blobmsg(const char *name, void *data, int len) name_len = strlen(name) + 1; f = calloc_a(sizeof(*f) + len, &new_name, name_len); + if (!f) + return NULL; + memcpy(f->data, data, len); if (name) f->avl.key = strcpy(new_name, name); @@ -426,12 +429,15 @@ static int eval_string(struct json_call *call, struct blob_buf *buf, const char char c = '%'; dest = blobmsg_alloc_string_buffer(buf, name, 1); + if (!dest) + return -1; + next = alloca(strlen(pattern) + 1); strcpy(next, pattern); for (str = next; str; str = next) { const char *cur; - char *end; + char *end, *new_buf; int cur_len = 0; bool cur_var = var; @@ -464,7 +470,14 @@ static int eval_string(struct json_call *call, struct blob_buf *buf, const char cur_len = end - str; } - dest = blobmsg_realloc_string_buffer(buf, len + cur_len + 1); + new_buf = blobmsg_realloc_string_buffer(buf, len + cur_len + 1); + if (!new_buf) { + /* Make eval_string return -1 */ + var = true; + break; + } + + dest = new_buf; memcpy(dest + len, cur, cur_len); len += cur_len; } -- cgit v1.2.3