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
This commit is contained in:
Andre Heinecke 2017-07-27 14:20:58 +02:00
parent c7be41a5f8
commit d3796e4504
No known key found for this signature in database
GPG Key ID: 2978E9D40CBABA5C

View File

@ -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;
}