key/key-io.c (key_new): Don't leak attribute `sym_table' on error.
[catacomb] / key / key-io.c
index 843f81d..15bebdc 100644 (file)
@@ -439,7 +439,7 @@ int key_open(key_file *f, const char *file, unsigned how,
 
   if ((how & KOPEN_MASK) == KOPEN_READ) {
     f->f &= ~KF_WRITE;
-    fclose(f->fp);
+    if (f->fp) fclose(f->fp);
     f->fp = 0;
   }
 
@@ -552,12 +552,12 @@ int key_new(key_file *f, uint32 id, const char *type, time_t exp, key **kk)
     k->exp = k->del = exp;
     k->c = 0;
     k->type = (char *)type; /* temporarily */
-    sym_create(&k->a);
     if ((e = insert(f, k)) != 0)
       DESTROY(k);
     else {
       k->k = key_newstring(KCAT_SHARE, "<unset>");
       k->type = xstrdup(type);
+      sym_create(&k->a);
       *kk = k;
       f->f |= KF_MODIFIED;
     }