diff options
author | NIIBE Yutaka <[email protected]> | 2019-07-26 01:00:31 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2019-07-26 01:03:36 +0000 |
commit | 15fe78184cc66ce6e657a6e949a522d7821f8a1c (patch) | |
tree | 5d87808089c4dfdafc162ff7f94d2c0c205c6862 | |
parent | gpg,gpgsm: Handle pkdecrypt responses with/without NUL terminators. (diff) | |
download | gnupg-15fe78184cc66ce6e657a6e949a522d7821f8a1c.tar.gz gnupg-15fe78184cc66ce6e657a6e949a522d7821f8a1c.zip |
sm: Fix error checking of decryption result.
* sm/call-agent.c (gpgsm_agent_pkdecrypt): Fix condition.
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r-- | sm/call-agent.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/sm/call-agent.c b/sm/call-agent.c index f9069a3b1..7ee728b74 100644 --- a/sm/call-agent.c +++ b/sm/call-agent.c @@ -528,7 +528,8 @@ gpgsm_agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc, return rc; } - put_membuf (&data, "", 1); /* Make sure it is 0 terminated so we can invoke strtoul safely. */ + /* Make sure it is 0 terminated so we can invoke strtoul safely. */ + put_membuf (&data, "", 1); buf = get_membuf (&data, &len); if (!buf) return gpg_error (GPG_ERR_ENOMEM); @@ -544,14 +545,14 @@ gpgsm_agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc, if (buf[len-1] != ')') return gpg_error (GPG_ERR_INV_SEXP); len--; /* Drop the final close-paren: */ - p = buf + 8; /* Skip leading parenthesis and the value tag. */ - len -= 8; /* Count only the data of the second part. */ + p = buf + 8; /* Skip leading parenthesis and the value tag. */ + len -= 8; /* Count only the data of the second part. */ } else { /* For compatibility with older gpg-agents handle the old style - incomplete S-exps. */ - len--; /* Do not count the Nul. */ + incomplete S-exps. */ + len--; /* Do not count the Nul. */ p = buf; } @@ -559,8 +560,8 @@ gpgsm_agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc, if (!n || *endp != ':') return gpg_error (GPG_ERR_INV_SEXP); endp++; - if (endp-p+n > len) - return gpg_error (GPG_ERR_INV_SEXP); /* Oops: Inconsistent S-Exp. */ + if (endp-p+n != len) + return gpg_error (GPG_ERR_INV_SEXP); /* Oops: Inconsistent S-Exp. */ memmove (buf, endp, n); |