From 57520bcb508235cfa6e046df1321718b2f2051db Mon Sep 17 00:00:00 2001 From: "olivier.hardouin@gmail.com" Date: Wed, 15 Jun 2016 16:10:22 +0200 Subject: [PATCH] fix crash if no uci config file present fix also possible null dereferenced pointers Signed-off-by: Olivier Hardouin --- uci.c | 6 ++++++ ucix.c | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/uci.c b/uci.c index f5aad02..46c3922 100644 --- a/uci.c +++ b/uci.c @@ -54,6 +54,9 @@ char* uci_get_option(struct uci_context *ctx, char *section, char *option) char *value = NULL; struct uci_ptr ptr; + if (!p) + return NULL; + memset(&ptr, 0, sizeof(ptr)); ptr.package = p->e.name; ptr.section = section; @@ -101,6 +104,9 @@ void uci_for_each_section_type(char *type, void (*cb)(char*, void*), void *priv) { struct uci_element *e; + if (!p) + return; + uci_foreach_element(&p->sections, e) if (!strcmp(type, uci_to_section(e)->type)) cb(e->name, priv); diff --git a/ucix.c b/ucix.c index e2a6780..1e4d1e6 100644 --- a/ucix.c +++ b/ucix.c @@ -18,6 +18,8 @@ static inline int ucix_get_ptr(struct uci_context *ctx, const char *p, const cha struct uci_context* ucix_init(const char *config_file) { struct uci_context *ctx = uci_alloc_context(); + if(!ctx) + return NULL; uci_add_delta_path(ctx, "/var/state"); if(uci_load(ctx, config_file, NULL) != UCI_OK) { @@ -30,6 +32,8 @@ struct uci_context* ucix_init(const char *config_file) struct uci_context* ucix_init_path(const char *path, const char *config_file) { struct uci_context *ctx = uci_alloc_context(); + if(!ctx) + return NULL; if(path) { uci_set_savedir(ctx, path); @@ -44,7 +48,10 @@ struct uci_context* ucix_init_path(const char *path, const char *config_file) void ucix_cleanup(struct uci_context *ctx) { - uci_free_context(ctx); + if(ctx) + { + uci_free_context(ctx); + } } int ucix_save(struct uci_context *ctx, const char *p) -- 2.25.1