diff options
Diffstat (limited to 'src/plugins/kdb/hdb/kdb_marshal.c')
-rw-r--r-- | src/plugins/kdb/hdb/kdb_marshal.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/plugins/kdb/hdb/kdb_marshal.c b/src/plugins/kdb/hdb/kdb_marshal.c index 624b17f..ca58835 100644 --- a/src/plugins/kdb/hdb/kdb_marshal.c +++ b/src/plugins/kdb/hdb/kdb_marshal.c @@ -743,13 +743,16 @@ cleanup: krb5_error_code kh_unmarshal_hdb_entry(krb5_context context, const hdb_entry *hentry, - krb5_db_entry *kentry) + krb5_db_entry **kentry_ptr) { kh_db_context *kh = KH_DB_CONTEXT(context); + krb5_db_entry *kentry; krb5_error_code code; unsigned int i; - memset(kentry, 0, sizeof(*kentry)); + kentry = k5alloc(sizeof(*kentry), &code); + if (kentry == NULL) + return code; kentry->magic = KRB5_KDB_MAGIC_NUMBER; kentry->len = KRB5_KDB_V1_BASE_LENGTH; @@ -801,9 +804,10 @@ kh_unmarshal_hdb_entry(krb5_context context, kentry->n_key_data++; } -cleanup: - if (code != 0) - kh_kdb_free_entry(context, kh, kentry); + *kentry_ptr = kentry; + kentry = NULL; +cleanup: + kh_kdb_free_entry(context, kh, kentry); return code; } |