Re: [OpenWrt-Devel] [PATCH] Deal with allocation errors in a few missing places.

2015-07-06 Thread Felix Fietkau
On 2015-06-26 00:20, Juliusz Chroboczek wrote:
 Since libubox is used by procd, it should deal gracefully with allocation
 failures.
 ---
  blobmsg_json.c |  2 ++
  json_script.c  |  3 +++
  kvlist.c   |  4 
  ustream.c  | 16 +---
  utils.c|  3 +++
  5 files changed, 25 insertions(+), 3 deletions(-)
 
 diff --git a/blobmsg_json.c b/blobmsg_json.c
 index ffde23d..1f2b4bc 100644
 --- a/blobmsg_json.c
 +++ b/blobmsg_json.c
 @@ -297,6 +297,8 @@ char *blobmsg_format_json_with_cb(struct blob_attr *attr, 
 bool list, blobmsg_jso
  
   s.len = blob_len(attr);
   s.buf = malloc(s.len);
 +if (!s.buf)
 +return NULL;
Please use tab instead of spaces for indenting.

- Felix
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH] Deal with allocation errors in a few missing places.

2015-06-25 Thread Juliusz Chroboczek
Since libubox is used by procd, it should deal gracefully with allocation
failures.
---
 blobmsg_json.c |  2 ++
 json_script.c  |  3 +++
 kvlist.c   |  4 
 ustream.c  | 16 +---
 utils.c|  3 +++
 5 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/blobmsg_json.c b/blobmsg_json.c
index ffde23d..1f2b4bc 100644
--- a/blobmsg_json.c
+++ b/blobmsg_json.c
@@ -297,6 +297,8 @@ char *blobmsg_format_json_with_cb(struct blob_attr *attr, 
bool list, blobmsg_jso
 
s.len = blob_len(attr);
s.buf = malloc(s.len);
+if (!s.buf)
+return NULL;
s.pos = 0;
s.custom_format = cb;
s.priv = priv;
diff --git a/json_script.c b/json_script.c
index 73c2502..8fe58b0 100644
--- a/json_script.c
+++ b/json_script.c
@@ -44,6 +44,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);
diff --git a/kvlist.c b/kvlist.c
index e0a8acb..4097109 100644
--- a/kvlist.c
+++ b/kvlist.c
@@ -81,6 +81,10 @@ void kvlist_set(struct kvlist *kv, const char *name, const 
void *data)
 
node = calloc_a(sizeof(struct kvlist_node) + len,
name_buf, strlen(name) + 1);
+if (!node)
+/* XXX */
+return;
+
memcpy(node-data, data, len);
 
node-avl.key = strcpy(name_buf, name);
diff --git a/ustream.c b/ustream.c
index e7ee9f0..e051b68 100644
--- a/ustream.c
+++ b/ustream.c
@@ -65,6 +65,9 @@ static int ustream_alloc_default(struct ustream *s, struct 
ustream_buf_list *l)
return -1;
 
buf = malloc(sizeof(*buf) + l-buffer_len + s-string_data);
+   if (!buf)
+   return -1;
+
ustream_init_buf(buf, l-buffer_len);
ustream_add_buf(l, buf);
 
@@ -490,6 +493,8 @@ int ustream_vprintf(struct ustream *s, const char *format, 
va_list arg)
return ustream_write_buffered(s, buf, maxlen, wr);
} else {
buf = malloc(maxlen + 1);
+   if (!buf)
+   return 0;
wr = vsnprintf(buf, maxlen + 1, format, arg);
wr = ustream_write(s, buf, wr, false);
free(buf);
@@ -507,20 +512,25 @@ int ustream_vprintf(struct ustream *s, const char 
*format, va_list arg)
maxlen = vsnprintf(buf, buflen, format, arg2);
va_end(arg2);
 
+   buf = malloc(maxlen + 1);
+   if (!buf)
+   return 0;
+
wr = maxlen;
if (wr = buflen)
wr = buflen - 1;
 
l-data_tail-tail += wr;
l-data_bytes += wr;
-   if (maxlen  buflen)
+   if (maxlen  buflen) {
+   free(buf);
return wr;
+   }
 
-   buf = malloc(maxlen + 1);
maxlen = vsnprintf(buf, maxlen + 1, format, arg);
wr = ustream_write_buffered(s, buf + wr, maxlen - wr, wr);
-   free(buf);
 
+   free(buf);
return wr;
 }
 
diff --git a/utils.c b/utils.c
index 8fd19f4..e9a1b69 100644
--- a/utils.c
+++ b/utils.c
@@ -43,6 +43,9 @@ void *__calloc_a(size_t len, ...)
va_end(ap1);
 
ptr = calloc(1, alloc_len);
+if(ptr == NULL)
+   return NULL;
+
alloc_len = 0;
foreach_arg(ap, cur_addr, cur_len, ret, len) {
*cur_addr = ptr[alloc_len];
-- 
2.1.4
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel