dav/config.c

changeset 150
37fb12574acd
parent 147
458a8dc68048
child 154
3cfb4670d9e6
--- a/dav/config.c	Sat Oct 03 20:10:54 2015 +0200
+++ b/dav/config.c	Sun Oct 04 15:57:40 2015 +0200
@@ -302,6 +302,7 @@
     Key *key = calloc(1, sizeof(Key));
     key->type = KEY_AES256;
     
+    int error = 0;
     while(node) {
         if(node->type == XML_ELEMENT_NODE) {
             char *value = util_xml_get_text(node);
@@ -315,6 +316,9 @@
                 if(key_data.length > 0) {
                     key->data = key_data.ptr;
                     key->length = key_data.length;
+                } else {
+                    fprintf(stderr, "Error: Cannot key from file: %s\n", value);
+                    error = 1;
                 }
             } else if(xstreq(node->name, "type")) {
                 if(!strcmp(value, "aes128")) {
@@ -330,15 +334,16 @@
         node = node->next;
     }
     
-    if(key->name) {
+    if(!error && key->name) {
+        error = 0;
         if(key->type == KEY_AES128) {
             if(key->length < 16) {
                 fprintf(
                         stderr,
-                        "Error: Key %s is too small (%d < 16)\n",
+                        "Error: Key %s is too small (%zu < 16)\n",
                         key->name,
                         key->length);
-                return;
+                error = 1;
             }
             key->length = 16;
         }
@@ -346,10 +351,10 @@
             if(key->length < 32) {
                 fprintf(
                         stderr,
-                        "Error: Key %s is too small (%d < 32)\n",
+                        "Error: Key %s is too small (%zu < 32)\n",
                         key->name,
                         key->length);
-                return;
+                error = 1;
             }
             key->length = 32;
         }
@@ -361,13 +366,20 @@
                 key->data = NULL;
             }
         }
-        ucx_map_cstr_put(keys, key->name, key);
-        dav_context_add_key(context, key);
-    } else {
+        
+        // add key to context
+        if(!error) {
+            ucx_map_cstr_put(keys, key->name, key);
+            dav_context_add_key(context, key);
+        }
+    }
+    
+    // cleanup
+    if(error) {
         if(key->data) {
             free(key->data);
-            free(key);
         }
+        free(key);
     }
 }
 

mercurial