gpg: Fix using --decrypt along with --use-embedded-filename.
authorWerner Koch <wk@gnupg.org>
Fri, 17 May 2019 11:40:24 +0000 (13:40 +0200)
committerWerner Koch <wk@gnupg.org>
Fri, 17 May 2019 11:40:24 +0000 (13:40 +0200)
* g10/options.h (opt): Add flags.dummy_outfile.
* g10/decrypt.c (decrypt_message): Set this global flag instead of the
fucntion local flag.
* g10/plaintext.c (get_output_file): Ignore opt.output if that was
used as a dummy option aslong with --use-embedded-filename.
--

The problem here was that an explicit specified --decrypt, as
meanwhile suggested, did not work with that dangerous
--use-embedded-filename.  In contrast it worked when gpg decrypted as
a side-effect of parsing the data.

GnuPG-bug-id: 4500
Signed-off-by: Werner Koch <wk@gnupg.org>
doc/gpg.texi
g10/decrypt.c
g10/options.h
g10/plaintext.c

index ddfa2f2..fd7dcdd 100644 (file)
@@ -3023,7 +3023,8 @@ to display the message. This option overrides @option{--set-filename}.
 @itemx --no-use-embedded-filename
 @opindex use-embedded-filename
 Try to create a file with a name as embedded in the data. This can be
-a dangerous option as it enables overwriting files. Defaults to no.
+a dangerous option as it enables overwriting files.  Defaults to no.
+Note that the option @option{--output} overrides this option.
 
 @item --cipher-algo @var{name}
 @opindex cipher-algo
index 4d6734d..9589aff 100644 (file)
@@ -48,7 +48,6 @@ decrypt_message (ctrl_t ctrl, const char *filename)
   armor_filter_context_t *afx = NULL;
   progress_filter_context_t *pfx;
   int rc;
-  int no_out = 0;
 
   pfx = new_progress_context ();
 
@@ -82,11 +81,13 @@ decrypt_message (ctrl_t ctrl, const char *filename)
 
   if (!opt.outfile)
     {
-      no_out = 1;
       opt.outfile = "-";
+      opt.flags.dummy_outfile = 1;
     }
+  else
+    opt.flags.dummy_outfile = 0;
   rc = proc_encryption_packets (ctrl, NULL, fp );
-  if (no_out)
+  if (opt.flags.dummy_outfile)
     opt.outfile = NULL;
 
   iobuf_close (fp);
index 8adf09f..b26cea0 100644 (file)
@@ -249,6 +249,8 @@ struct
     unsigned int disable_signer_uid:1;
     /* Flag to enable experimental features from RFC4880bis.  */
     unsigned int rfc4880bis:1;
+    /* Hack: --output is not given but OUTFILE was temporary set to "-".  */
+    unsigned int dummy_outfile:1;
   } flags;
 
   /* Linked list of ways to find a key if the key isn't on the local
index c5d1ddb..f9e0a42 100644 (file)
@@ -70,7 +70,8 @@ get_output_file (const byte *embedded_name, int embedded_namelen,
           goto leave;
         }
     }
-  else if (opt.outfile)
+  else if (opt.outfile
+           && !(opt.flags.use_embedded_filename && opt.flags.dummy_outfile))
     {
       fname = xtrystrdup (opt.outfile);
       if (!fname)