diff -r 509e9e1cbdcc -r 37fb12574acd dav/config.c --- 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); } }