diff --git a/admin/load.c b/admin/load.c index 307f11984..297d3b6e6 100644 --- a/admin/load.c +++ b/admin/load.c @@ -135,12 +135,17 @@ parse_keys(hdb_entry *ent, char *str) krb5_data_zero (key->salt); } else { if(strcmp(p, "-") != 0){ + size_t p_len = strlen(p); + key->salt = malloc(sizeof(*key->salt)); - krb5_data_alloc(key->salt, (strlen(p) - 1) / 2 + 1); - for(i = 0; i < strlen(p); i += 2){ - sscanf(p + i, "%02x", &tmp); - ((u_char*)key->salt->data)[i / 2] = tmp; - } + if (p_len) { + krb5_data_alloc(key->salt, (p_len - 1) / 2 + 1); + for(i = 0; i < p_len; i += 2){ + sscanf(p + i, "%02x", &tmp); + ((u_char*)key->salt->data)[i / 2] = tmp; + } + } else + krb5_data_zero (key->salt); } p = strsep(&str, ":"); } diff --git a/kadmin/load.c b/kadmin/load.c index 307f11984..297d3b6e6 100644 --- a/kadmin/load.c +++ b/kadmin/load.c @@ -135,12 +135,17 @@ parse_keys(hdb_entry *ent, char *str) krb5_data_zero (key->salt); } else { if(strcmp(p, "-") != 0){ + size_t p_len = strlen(p); + key->salt = malloc(sizeof(*key->salt)); - krb5_data_alloc(key->salt, (strlen(p) - 1) / 2 + 1); - for(i = 0; i < strlen(p); i += 2){ - sscanf(p + i, "%02x", &tmp); - ((u_char*)key->salt->data)[i / 2] = tmp; - } + if (p_len) { + krb5_data_alloc(key->salt, (p_len - 1) / 2 + 1); + for(i = 0; i < p_len; i += 2){ + sscanf(p + i, "%02x", &tmp); + ((u_char*)key->salt->data)[i / 2] = tmp; + } + } else + krb5_data_zero (key->salt); } p = strsep(&str, ":"); }