aboutsummaryrefslogtreecommitdiffstats
path: root/sm/t-minip12.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2023-06-29 14:33:03 +0000
committerWerner Koch <[email protected]>2023-06-29 15:49:10 +0000
commit5f694dc0be994e8cd3bc009139d1349f3b1fcf62 (patch)
tree13135e00379e0f4bb382691854e101bc09246ceb /sm/t-minip12.c
parentsm: Major rewrite of the PKCS#12 parser (diff)
downloadgnupg-5f694dc0be994e8cd3bc009139d1349f3b1fcf62.tar.gz
gnupg-5f694dc0be994e8cd3bc009139d1349f3b1fcf62.zip
sm: Adding missing stuff to the PKCS#12 parser rewrite.
* sm/minip12.c (struct bufferlist_s): New. (struct tlv_ctx_s): Add bufferlist. (tlv_register_buffer): New. (tlv_release): Release bufferlist. (tlv_expect_object): Handle octet string cramming. (tlv_expect_octet_string): Ditto. (cram_octet_string): Changed interface. We don't need the input_consumed value anymore. * sm/minip12.c (parse_shrouded_key_bag): Also parse the attribute set. * sm/t-minip12.c (main): Add option --no-extra. (cert_collect_cb, run_tests_from_file): Fix memory leak * tests/cms/samplekeys/t5793-openssl.pfx: New from T5793. * tests/cms/samplekeys/t5793-test.pfx: Ditto. * tests/cms/samplekeys/Description-p12: Add them. * tests/cms/Makefile.am (EXTRA_DIST): Add samplekeys. -- This should finish the rewrite of the pkcsc#12 parser for now. More fun is likely to come. GnuPG-bug-id: 6536, 5793
Diffstat (limited to 'sm/t-minip12.c')
-rw-r--r--sm/t-minip12.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/sm/t-minip12.c b/sm/t-minip12.c
index 80ba4c69e..de6b7e5cc 100644
--- a/sm/t-minip12.c
+++ b/sm/t-minip12.c
@@ -444,12 +444,14 @@ static void
cert_collect_cb (void *opaque, const unsigned char *cert, size_t certlen)
{
char **certstr = opaque;
- char *hash;
+ char *hash, *save;
hash = hash_buffer (cert, certlen);
if (*certstr)
{
- *certstr = xstrconcat (*certstr, ",", hash, NULL);
+ save = *certstr;
+ *certstr = xstrconcat (save, ",", hash, NULL);
+ xfree (save);
xfree (hash);
}
else
@@ -645,7 +647,12 @@ run_tests_from_file (const char *descfname)
copy_data (&p, line, lineno);
hexdowncase (p);
if (p && cert)
- cert = xstrconcat (cert, ",", p, NULL);
+ {
+ char *save = cert;
+ cert = xstrconcat (save, ",", p, NULL);
+ xfree (save);
+ xfree (p);
+ }
else
cert = p;
}
@@ -681,6 +688,7 @@ main (int argc, char **argv)
char const *name = NULL;
char const *pass = NULL;
int ret;
+ int no_extra = 0;
if (argc)
{ argc--; argv++; }
@@ -697,12 +705,18 @@ main (int argc, char **argv)
fputs ("usage: " PGM " <pkcs12file> [<passphrase>]\n"
"Without <pkcs12file> a regression test is run\n"
"Options:\n"
+ " --no-extra do not run extra tests\n"
" --verbose print timings etc.\n"
" given twice shows more\n"
" --debug flyswatter\n"
, stdout);
exit (0);
}
+ else if (!strcmp (*argv, "--no-extra"))
+ {
+ no_extra = 1;
+ argc--; argv++;
+ }
else if (!strcmp (*argv, "--verbose"))
{
verbose++;
@@ -761,7 +775,7 @@ main (int argc, char **argv)
xfree (descfname);
/* Check whether we have non-public regression test cases. */
- p = value_from_gnupg_autogen_rc ("GNUPG_EXTRA_TESTS_DIR");
+ p = no_extra? NULL:value_from_gnupg_autogen_rc ("GNUPG_EXTRA_TESTS_DIR");
if (p)
{
descfname = xstrconcat (p, "/pkcs12/Description", NULL);