diff options
| author | Andre Heinecke <[email protected]> | 2017-07-27 12:20:58 +0000 | 
|---|---|---|
| committer | Andre Heinecke <[email protected]> | 2017-07-27 12:23:25 +0000 | 
| commit | d3796e4504a2b4f422de17d78f3acfe8dd199c9c (patch) | |
| tree | 5dc39a3a0c2bc0075ba3381cc87a5367f07582cd | |
| parent | cpp: Fix Key::isDeVs for subkeys (diff) | |
| download | gpgme-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 '')
| -rw-r--r-- | src/decrypt.c | 18 | 
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;  } | 
