aboutsummaryrefslogtreecommitdiffstats
path: root/src/decrypt.c
diff options
context:
space:
mode:
authorAndre Heinecke <[email protected]>2017-07-27 12:20:58 +0000
committerAndre Heinecke <[email protected]>2017-07-27 12:23:25 +0000
commitd3796e4504a2b4f422de17d78f3acfe8dd199c9c (patch)
tree5dc39a3a0c2bc0075ba3381cc87a5367f07582cd /src/decrypt.c
parentcpp: Fix Key::isDeVs for subkeys (diff)
downloadgpgme-d3796e4504a2b4f422de17d78f3acfe8dd199c9c.tar.gz
gpgme-d3796e4504a2b4f422de17d78f3acfe8dd199c9c.zip
core: Fix status parsing for decrypt + verify
* src/decrypt.c (parse_status_error): Don't modify args. -- Otherwise chained status handlers will not see the full args which resulted in a parse error in the verify status handler. GnuPG-Bug-Id: T3310
Diffstat (limited to 'src/decrypt.c')
-rw-r--r--src/decrypt.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/decrypt.c b/src/decrypt.c
index aa17771d..eb7ec4d3 100644
--- a/src/decrypt.c
+++ b/src/decrypt.c
@@ -145,10 +145,18 @@ parse_status_error (char *args, op_data_t opd)
gpgme_error_t err;
char *field[3];
int nfields;
+ char *args2;
- nfields = _gpgme_split_fields (args, field, DIM (field));
+ if (!args)
+ return trace_gpg_error (GPG_ERR_INV_ENGINE);
+
+ args2 = strdup (args); /* Split modifies the input string. */
+ nfields = _gpgme_split_fields (args2, field, DIM (field));
if (nfields < 1)
- return trace_gpg_error (GPG_ERR_INV_ENGINE); /* Required arg missing. */
+ {
+ free (args2);
+ return trace_gpg_error (GPG_ERR_INV_ENGINE); /* Required arg missing. */
+ }
err = nfields < 2 ? 0 : atoi (field[1]);
if (!strcmp (field[0], "decrypt.algorithm"))
@@ -159,7 +167,10 @@ parse_status_error (char *args, op_data_t opd)
{
opd->result.unsupported_algorithm = strdup (field[2]);
if (!opd->result.unsupported_algorithm)
- return gpg_error_from_syserror ();
+ {
+ free (args2);
+ return gpg_error_from_syserror ();
+ }
}
}
else if (!strcmp (field[0], "decrypt.keyusage"))
@@ -193,6 +204,7 @@ parse_status_error (char *args, op_data_t opd)
}
+ free (args2);
return 0;
}