Module Name:    src
Committed By:   agc
Date:           Tue Jun  9 02:19:47 UTC 2009

Modified Files:
        src/crypto/external/bsd/netpgp/dist/src/lib: reader.c

Log Message:
Fix a bug in decryption whereby a bad passphrase would cause a segmentation
violation


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 \
    src/crypto/external/bsd/netpgp/dist/src/lib/reader.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/crypto/external/bsd/netpgp/dist/src/lib/reader.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/reader.c:1.18 src/crypto/external/bsd/netpgp/dist/src/lib/reader.c:1.19
--- src/crypto/external/bsd/netpgp/dist/src/lib/reader.c:1.18	Tue Jun  9 00:51:02 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/reader.c	Tue Jun  9 02:19:47 2009
@@ -54,7 +54,7 @@
 
 #if defined(__NetBSD__)
 __COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: reader.c,v 1.18 2009/06/09 00:51:02 agc Exp $");
+__RCSID("$NetBSD: reader.c,v 1.19 2009/06/09 02:19:47 agc Exp $");
 #endif
 
 #include <sys/types.h>
@@ -2179,17 +2179,19 @@
 				seckey.u.skey_passphrase.passphrase =
 					&cbinfo->cryptinfo.passphrase;
 				CALLBACK(OPS_GET_PASSPHRASE, cbinfo, &seckey);
-				if (!cbinfo->cryptinfo.passphrase) {
-					fprintf(stderr,
-						"can't get passphrase\n");
-					return 0;
-				}
 			}
 			/* then it must be encrypted */
-			secret = __ops_decrypt_seckey(cbinfo->cryptinfo.keydata,
-					cbinfo->cryptinfo.passphrase);
+			secret = __ops_decrypt_seckey(
+						cbinfo->cryptinfo.keydata,
+						cbinfo->cryptinfo.passphrase);
+			if (!secret) {
+				(void) __ops_forget(
+					cbinfo->cryptinfo.passphrase,
+					strlen(cbinfo->cryptinfo.passphrase));
+				cbinfo->cryptinfo.passphrase = NULL;
+				(void) fprintf(stderr, "Bad passphrase\n");
+			}
 		}
-
 		*content->get_seckey.seckey = secret;
 		break;
 

Reply via email to