From 1dc153dfd225929a2067f83de1b0ef9aba6033ed Mon Sep 17 00:00:00 2001
From: David Shaw <dshaw@jabberwocky.com>
Date: Wed, 5 Mar 2003 15:34:42 +0000
Subject: [PATCH] * passphrase.c (agent_get_passphrase): Fix memory leak with
 symmetric messages.  Fix segfault with symmetric messages.  Fix incorrect
 prompt with symmetric messages.

---
 g10/ChangeLog    |  6 ++++++
 g10/passphrase.c | 13 ++++++++-----
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/g10/ChangeLog b/g10/ChangeLog
index 4c25e991a..c0227385c 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,9 @@
+2003-03-05  David Shaw  <dshaw@jabberwocky.com>
+
+	* passphrase.c (agent_get_passphrase): Fix memory leak with
+	symmetric messages.  Fix segfault with symmetric messages.  Fix
+	incorrect prompt with symmetric messages.
+
 2003-03-04  David Shaw  <dshaw@jabberwocky.com>
 
 	* options.skel: Add explantion and commented-out
diff --git a/g10/passphrase.c b/g10/passphrase.c
index fe7e9670a..e7dcd6d6e 100644
--- a/g10/passphrase.c
+++ b/g10/passphrase.c
@@ -614,9 +614,12 @@ agent_get_passphrase ( u32 *keyid, int mode, const char *tryagain_text )
 
   memset (fpr, 0, MAX_FINGERPRINT_LEN );
   if( keyid && get_pubkey( pk, keyid ) )
-    pk = NULL; /* oops: no key for some reason */
+    {
+      free_public_key( pk );      
+      pk = NULL; /* oops: no key for some reason */
+    }
   
-  if ( !mode && pk )
+  if ( !mode && pk && keyid )
     { 
       char *uid;
       size_t uidlen;
@@ -658,10 +661,10 @@ agent_get_passphrase ( u32 *keyid, int mode, const char *tryagain_text )
       }
       
     }
-  else if (mode == 1 ) 
-    atext = m_strdup ( _("Enter passphrase\n") );
-  else 
+  else if (mode == 2 ) 
     atext = m_strdup ( _("Repeat passphrase\n") );
+  else
+    atext = m_strdup ( _("Enter passphrase\n") );
                 
   if ( (fd = agent_open (&prot)) == -1 ) 
     goto failure;