1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-23 10:29:58 +01:00

sm: Fix error checking of decryption result.

* sm/call-agent.c (gpgsm_agent_pkdecrypt): Fix condition.

--

Cherry-pick master commit of:
	15fe78184cc66ce6e657a6e949a522d7821f8a1c

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
NIIBE Yutaka 2019-07-26 10:00:31 +09:00
parent 64500e7f6d
commit ccf5cc8b0b

View File

@ -496,7 +496,8 @@ gpgsm_agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc,
return rc; 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); buf = get_membuf (&data, &len);
if (!buf) if (!buf)
return gpg_error (GPG_ERR_ENOMEM); return gpg_error (GPG_ERR_ENOMEM);
@ -512,14 +513,14 @@ gpgsm_agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc,
if (buf[len-1] != ')') if (buf[len-1] != ')')
return gpg_error (GPG_ERR_INV_SEXP); return gpg_error (GPG_ERR_INV_SEXP);
len--; /* Drop the final close-paren: */ len--; /* Drop the final close-paren: */
p = buf + 8; /* Skip leading parenthesis and the value tag. */ p = buf + 8; /* Skip leading parenthesis and the value tag. */
len -= 8; /* Count only the data of the second part. */ len -= 8; /* Count only the data of the second part. */
} }
else else
{ {
/* For compatibility with older gpg-agents handle the old style /* For compatibility with older gpg-agents handle the old style
incomplete S-exps. */ incomplete S-exps. */
len--; /* Do not count the Nul. */ len--; /* Do not count the Nul. */
p = buf; p = buf;
} }
@ -527,8 +528,8 @@ gpgsm_agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc,
if (!n || *endp != ':') if (!n || *endp != ':')
return gpg_error (GPG_ERR_INV_SEXP); return gpg_error (GPG_ERR_INV_SEXP);
endp++; endp++;
if (endp-p+n > len) if (endp-p+n != len)
return gpg_error (GPG_ERR_INV_SEXP); /* Oops: Inconsistent S-Exp. */ return gpg_error (GPG_ERR_INV_SEXP); /* Oops: Inconsistent S-Exp. */
memmove (buf, endp, n); memmove (buf, endp, n);