fix crash if no uci config file present
authorolivier.hardouin@gmail.com <olivier.hardouin@gmail.com>
Wed, 15 Jun 2016 14:10:22 +0000 (16:10 +0200)
committerJohn Crispin <john@phrozen.org>
Wed, 15 Jun 2016 15:28:03 +0000 (17:28 +0200)
fix also possible null dereferenced pointers

Signed-off-by: Olivier Hardouin <olivier.hardouin@gmail.com>
uci.c
ucix.c

diff --git a/uci.c b/uci.c
index f5aad020da387d5a19aee69faf63608a31aff4b2..46c392221b42bc9bc76981951ee8782ad758fd25 100644 (file)
--- 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 e2a6780ec5e1ccaab3e7a4a7c269c9480923b7ab..1e4d1e68c2c48d55f807a0729855452d4e6cac52 100644 (file)
--- 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)