g10: Fix memory leak in enum_secret_keys.
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 13 Sep 2018 22:55:20 +0000 (07:55 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 13 Sep 2018 22:55:20 +0000 (07:55 +0900)
* g10/skclist.c (enum_secret_keys): Don't forget to call
free_public_key in the error return paths.

--

Reported-by: Philippe Antoine
GnuPG-bug-id: 4140
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
g10/skclist.c

index fd747fb..d233549 100644 (file)
@@ -345,7 +345,11 @@ enum_secret_keys (ctrl_t ctrl, void **context, PKT_public_key *sk)
       /* Make a new context.  */
       c = xtrycalloc (1, sizeof *c);
       if (!c)
-        return gpg_error_from_syserror ();
+        {
+          err = gpg_error_from_syserror ();
+          free_public_key (sk);
+          return err;
+        }
       *context = c;
     }
 
@@ -363,7 +367,10 @@ enum_secret_keys (ctrl_t ctrl, void **context, PKT_public_key *sk)
     }
 
   if (c->eof)
-    return gpg_error (GPG_ERR_EOF);
+    {
+      free_public_key (sk);
+      return gpg_error (GPG_ERR_EOF);
+    }
 
   for (;;)
     {
@@ -475,6 +482,7 @@ enum_secret_keys (ctrl_t ctrl, void **context, PKT_public_key *sk)
 
                 default: /* No more names to check - stop.  */
                   c->eof = 1;
+                  free_public_key (sk);
                   return gpg_error (GPG_ERR_EOF);
                 }
             }