aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2022-04-12 06:18:53 +0000
committerNIIBE Yutaka <[email protected]>2022-04-12 06:22:05 +0000
commit412c8fcdfd03c529b7a01d841c850ab4914ffb37 (patch)
tree3ee6bad81d28d0117ec271dc4b1b8f88487e6a9b
parentParse Preferred AEAD cerphersuites subpacket. (diff)
downloadgnupg-412c8fcdfd03c529b7a01d841c850ab4914ffb37.tar.gz
gnupg-412c8fcdfd03c529b7a01d841c850ab4914ffb37.zip
Parse v5 signature subpacket.
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--g10/parse-packet.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/g10/parse-packet.c b/g10/parse-packet.c
index 91347ba34..7acad4aa9 100644
--- a/g10/parse-packet.c
+++ b/g10/parse-packet.c
@@ -2188,10 +2188,18 @@ parse_signature (IOBUF inp, int pkttype, unsigned long pktlen,
sig->flags.revocable = 1;
if (is_v4or5) /* Read subpackets. */
{
- if (pktlen < 2)
- goto underflow;
- n = read_16 (inp);
- pktlen -= 2; /* Length of hashed data. */
+ if (pktlen < 2 || (sig->version == 5 && pktlen < 4))
+ goto underflow;
+ if (sig->version == 5)
+ {
+ n = read_32 (inp);
+ pktlen -= 4; /* Length of hashed data. */
+ }
+ else
+ {
+ n = read_16 (inp);
+ pktlen -= 2; /* Length of hashed data. */
+ }
if (pktlen < n)
goto underflow;
if (n > 10000)
@@ -2218,10 +2226,18 @@ parse_signature (IOBUF inp, int pkttype, unsigned long pktlen,
}
pktlen -= n;
}
- if (pktlen < 2)
- goto underflow;
- n = read_16 (inp);
- pktlen -= 2; /* Length of unhashed data. */
+ if (pktlen < 2 || (sig->version == 5 && pktlen < 4))
+ goto underflow;
+ if (sig->version == 5)
+ {
+ n = read_32 (inp);
+ pktlen -= 4; /* Length of unhashed data. */
+ }
+ else
+ {
+ n = read_16 (inp);
+ pktlen -= 2; /* Length of unhashed data. */
+ }
if (pktlen < n)
goto underflow;
if (n > 10000)