gpg: Fix using --decrypt along with --use-embedded-filename.

* 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>
This commit is contained in:
Werner Koch 2019-05-17 13:40:24 +02:00
parent 7e5847da0f
commit 386bacd974
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
4 changed files with 10 additions and 5 deletions

View File

@ -3023,7 +3023,8 @@ to display the message. This option overrides @option{--set-filename}.
@itemx --no-use-embedded-filename @itemx --no-use-embedded-filename
@opindex use-embedded-filename @opindex use-embedded-filename
Try to create a file with a name as embedded in the data. This can be 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} @item --cipher-algo @var{name}
@opindex cipher-algo @opindex cipher-algo

View File

@ -48,7 +48,6 @@ decrypt_message (ctrl_t ctrl, const char *filename)
armor_filter_context_t *afx = NULL; armor_filter_context_t *afx = NULL;
progress_filter_context_t *pfx; progress_filter_context_t *pfx;
int rc; int rc;
int no_out = 0;
pfx = new_progress_context (); pfx = new_progress_context ();
@ -82,11 +81,13 @@ decrypt_message (ctrl_t ctrl, const char *filename)
if (!opt.outfile) if (!opt.outfile)
{ {
no_out = 1;
opt.outfile = "-"; opt.outfile = "-";
opt.flags.dummy_outfile = 1;
} }
else
opt.flags.dummy_outfile = 0;
rc = proc_encryption_packets (ctrl, NULL, fp ); rc = proc_encryption_packets (ctrl, NULL, fp );
if (no_out) if (opt.flags.dummy_outfile)
opt.outfile = NULL; opt.outfile = NULL;
iobuf_close (fp); iobuf_close (fp);

View File

@ -249,6 +249,8 @@ struct
unsigned int disable_signer_uid:1; unsigned int disable_signer_uid:1;
/* Flag to enable experimental features from RFC4880bis. */ /* Flag to enable experimental features from RFC4880bis. */
unsigned int rfc4880bis:1; unsigned int rfc4880bis:1;
/* Hack: --output is not given but OUTFILE was temporary set to "-". */
unsigned int dummy_outfile:1;
} flags; } flags;
/* Linked list of ways to find a key if the key isn't on the local /* Linked list of ways to find a key if the key isn't on the local

View File

@ -70,7 +70,8 @@ get_output_file (const byte *embedded_name, int embedded_namelen,
goto leave; goto leave;
} }
} }
else if (opt.outfile) else if (opt.outfile
&& !(opt.flags.use_embedded_filename && opt.flags.dummy_outfile))
{ {
fname = xtrystrdup (opt.outfile); fname = xtrystrdup (opt.outfile);
if (!fname) if (!fname)