diff options
author | NIIBE Yutaka <[email protected]> | 2022-03-09 01:48:20 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2022-03-09 01:57:22 +0000 |
commit | 0c7dffe99d3fded41df87512063515b5ca2da820 (patch) | |
tree | 02e75c337bf34083377fc1f70e5bf63b420d0fba | |
parent | gpgsm: New option --require-compliance (diff) | |
download | gnupg-0c7dffe99d3fded41df87512063515b5ca2da820.tar.gz gnupg-0c7dffe99d3fded41df87512063515b5ca2da820.zip |
sm: Fix parsing encrypted data.
* sm/minip12.c (cram_octet_string): Finish when N==0.
(parse_bag_encrypted_data): Support constructed data with multiple
octet strings.
--
Backport master commit of:
6c50834c0905b55ee2da18728194dd4c93c377bf
GnuPG-bug-id: 5793
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r-- | sm/minip12.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/sm/minip12.c b/sm/minip12.c index 9096f0bf1..f7f93c5ec 100644 --- a/sm/minip12.c +++ b/sm/minip12.c @@ -304,7 +304,7 @@ cram_octet_string (const unsigned char *input, size_t *length, if (!output) goto bailout; - for (;;) + while (n) { if (parse_tag (&s, &n, &ti)) goto bailout; @@ -874,6 +874,19 @@ parse_bag_encrypted_data (const unsigned char *buffer, size_t length, r_consumed = NULL; /* Ugly hack to not update that value any further. */ ti.length = n; } + else if (ti.class == ASNCONTEXT && ti.tag == 0 && ti.is_constructed) + { + where = "octets-rc2or3des-ciphertext"; + n = ti.length; + cram_buffer = cram_octet_string ( p, &n, &consumed); + if (!cram_buffer) + goto bailout; + p = p_start = cram_buffer; + if (r_consumed) + *r_consumed = consumed; + r_consumed = NULL; /* Ugly hack to not update that value any further. */ + ti.length = n; + } else if (ti.class == ASNCONTEXT && ti.tag == 0 && ti.length ) ; else |