{
asn1_item *item;
- return_val_if_fail (cache != NULL, NULL);
+ if (cache == NULL)
+ return NULL;
+
return_val_if_fail (struct_name != NULL, NULL);
return_val_if_fail (der != NULL, NULL);
{
asn1_item *item;
- return_if_fail (cache != NULL);
+ if (cache == NULL)
+ return;
+
return_if_fail (struct_name != NULL);
return_if_fail (der != NULL);
return_if_fail (der_len != 0);
void
p11_asn1_cache_flush (p11_asn1_cache *cache)
{
- return_if_fail (cache != NULL);
+ if (cache == NULL)
+ return;
p11_dict_clear (cache->items);
}
struct _p11_parser {
p11_asn1_cache *asn1_cache;
p11_dict *asn1_defs;
+ bool asn1_owned;
p11_persist *persist;
char *basename;
p11_array *parsed;
{
p11_parser parser = { 0, };
- return_val_if_fail (asn1_cache != NULL, NULL);
-
- parser.asn1_defs = p11_asn1_cache_defs (asn1_cache);
- parser.asn1_cache = asn1_cache;
+ if (asn1_cache == NULL) {
+ parser.asn1_owned = true;
+ parser.asn1_defs = p11_asn1_defs_load ();
+ } else {
+ parser.asn1_defs = p11_asn1_cache_defs (asn1_cache);
+ parser.asn1_cache = asn1_cache;
+ parser.asn1_owned = false;
+ }
parser.parsed = p11_array_new (p11_attrs_free);
return_val_if_fail (parser.parsed != NULL, NULL);
return_if_fail (parser != NULL);
p11_persist_free (parser->persist);
p11_array_free (parser->parsed);
+ if (parser->asn1_owned)
+ p11_dict_free (parser->asn1_defs);
free (parser);
}
p11_message_loud ();
}
+static void
+test_parse_no_asn1_cache (void)
+{
+ p11_parser *parser;
+ int ret;
+
+ parser = p11_parser_new (NULL);
+ assert_ptr_not_null (parser);
+
+ ret = p11_parse_file (parser, SRCDIR "/files/cacert3.der", P11_PARSE_FLAG_NONE);
+ assert_num_eq (P11_PARSE_SUCCESS, ret);
+
+ /* Should have gotten certificate */
+ assert_num_eq (1, p11_parser_parsed (parser)->num);
+
+ p11_parser_free (parser);
+}
+
int
main (int argc,
char *argv[])
p11_test (test_parse_thawte, "/parser/parse_thawte");
p11_test (test_parse_invalid_file, "/parser/parse_invalid_file");
p11_test (test_parse_unrecognized, "/parser/parse_unrecognized");
+
+ p11_fixture (NULL, NULL);
+ p11_test (test_parse_no_asn1_cache, "/parser/null-asn1-cache");
+
return p11_test_run (argc, argv);
}