aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2020-06-26 13:21:31 +0000
committerWerner Koch <[email protected]>2020-06-26 13:21:31 +0000
commitccbb0cfeefed096a9841b6557d10eef12d55b721 (patch)
tree61a62584680d648abc4af5a22f52bdbb7a2215b3
parentsm: Print the serial number of a cert also in decimal. (diff)
downloadgnupg-ccbb0cfeefed096a9841b6557d10eef12d55b721.tar.gz
gnupg-ccbb0cfeefed096a9841b6557d10eef12d55b721.zip
sm: Try not to output a partial new message after an error.
* sm/gpgsm.c (main) <aSign,aEncr>: Uses gpgrt_fcancel on error. -- When creating a signature or encrypting and the respective key is not available or the user canceled the PIN entry gpgsm prints the initial part of the message due to internal buffering in gpgrt. By using gpgrt_fcancel we can avoid this at least as long as the data is less than the standard buffer size (which is currently 8k). If is not a complete solution but the best we can do easily. Outputting to the tty is anyway more of a testing aid than for real use. This makes use of the new gpgrt_fcancel API. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to '')
-rw-r--r--sm/gpgsm.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index 541f904df..b91667a1e 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -953,6 +953,7 @@ parse_keyserver_line (char *line,
int
main ( int argc, char **argv)
{
+ gpg_error_t err;
gpgrt_argparse_t pargs;
int orig_argc;
char **orig_argv;
@@ -1929,7 +1930,15 @@ main ( int argc, char **argv)
else
wrong_args ("--encrypt [datafile]");
+#if GPGRT_VERSION_NUMBER >= 0x012700 /* >= 1.39 */
+ if (err)
+ gpgrt_fcancel (fp);
+ else
+ es_fclose (fp);
+#else
+ (void)err;
es_fclose (fp);
+#endif
}
break;
@@ -1941,14 +1950,22 @@ main ( int argc, char **argv)
signing because that is what gpg does.*/
set_binary (stdin);
if (!argc) /* Create from stdin. */
- gpgsm_sign (&ctrl, signerlist, 0, detached_sig, fp);
+ err = gpgsm_sign (&ctrl, signerlist, 0, detached_sig, fp);
else if (argc == 1) /* From file. */
- gpgsm_sign (&ctrl, signerlist,
+ err = gpgsm_sign (&ctrl, signerlist,
open_read (*argv), detached_sig, fp);
else
wrong_args ("--sign [datafile]");
+#if GPGRT_VERSION_NUMBER >= 0x012700 /* >= 1.39 */
+ if (err)
+ gpgrt_fcancel (fp);
+ else
+ es_fclose (fp);
+#else
+ (void)err;
es_fclose (fp);
+#endif
}
break;