From d3796e4504a2b4f422de17d78f3acfe8dd199c9c Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Thu, 27 Jul 2017 14:20:58 +0200 Subject: 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 --- src/decrypt.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/decrypt.c') 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; } -- cgit v1.2.3