agent: Fix memory leaks.
authorNIIBE Yutaka <gniibe@fsij.org>
Tue, 30 May 2017 04:56:20 +0000 (13:56 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Tue, 30 May 2017 04:56:20 +0000 (13:56 +0900)
* agent/divert-scd.c (ask_for_card): Free WANT_KID and WANT_SN_DISP.
* agent/gpg-agent.c (create_server_socket): Free UNADDR.

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
agent/divert-scd.c
agent/gpg-agent.c

index 153119b..88b35cd 100644 (file)
@@ -52,6 +52,7 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid)
     {
       rc = gpg_error_from_syserror ();
       xfree (want_sn);
+      xfree (want_kid);
       return rc;
     }
 
@@ -84,6 +85,7 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid)
           serialno = NULL;
           if (!i)
             {
+              xfree (want_sn_disp);
               xfree (want_sn);
               *r_kid = want_kid;
               return 0; /* yes, we have the correct card */
@@ -122,9 +124,9 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid)
           else
             {
               rc = agent_get_confirmation (ctrl, desc, NULL, NULL, 0);
-             if (ctrl->pinentry_mode == PINENTRY_MODE_LOOPBACK &&
-                 gpg_err_code (rc) == GPG_ERR_NO_PIN_ENTRY)
-               rc = gpg_error (GPG_ERR_CARD_NOT_PRESENT);
+              if (ctrl->pinentry_mode == PINENTRY_MODE_LOOPBACK &&
+                  gpg_err_code (rc) == GPG_ERR_NO_PIN_ENTRY)
+                rc = gpg_error (GPG_ERR_CARD_NOT_PRESENT);
 
               xfree (desc);
             }
index 77b811c..44b9be2 100644 (file)
@@ -2129,6 +2129,7 @@ create_server_socket (char *name, int primary, int cygwin,
           log_error ("error preparing socket '%s': %s\n",
                      name, gpg_strerror (gpg_error_from_syserror ()));
         *name = 0; /* Inhibit removal of the socket by cleanup(). */
+        xfree (unaddr);
         agent_exit (2);
       }
     if (redirected)
@@ -2166,6 +2167,7 @@ create_server_socket (char *name, int primary, int cygwin,
                        "not starting a new one\n"));
           *name = 0; /* Inhibit removal of the socket by cleanup(). */
           assuan_sock_close (fd);
+          xfree (unaddr);
           agent_exit (2);
         }
       gnupg_remove (unaddr->sun_path);
@@ -2178,11 +2180,12 @@ create_server_socket (char *name, int primary, int cygwin,
       /* We use gpg_strerror here because it allows us to get strings
          for some W32 socket error codes.  */
       log_error (_("error binding socket to '%s': %s\n"),
-                unaddr->sun_path,
+                 unaddr->sun_path,
                  gpg_strerror (gpg_error_from_syserror ()));
 
       assuan_sock_close (fd);
       *name = 0; /* Inhibit removal of the socket by cleanup(). */
+      xfree (unaddr);
       agent_exit (2);
     }
 
@@ -2195,12 +2198,14 @@ create_server_socket (char *name, int primary, int cygwin,
       log_error (_("listen() failed: %s\n"), strerror (errno));
       *name = 0; /* Inhibit removal of the socket by cleanup(). */
       assuan_sock_close (fd);
+      xfree (unaddr);
       agent_exit (2);
     }
 
   if (opt.verbose)
     log_info (_("listening on socket '%s'\n"), unaddr->sun_path);
 
+  xfree (unaddr);
   return fd;
 }