From d6e0982658acb231333ebfbfb7efff8b762231d0 Mon Sep 17 00:00:00 2001
From: Stef Walter <stefw@gnome.org>
Date: Thu, 4 Apr 2013 08:04:10 +0200
Subject: [PATCH] Don't print erroneous debug messages when skipping files

The parser automatically skips over files that it cannot parse. Don't
print confusing debug messages about DER parse failures when it does so.
---
 common/asn1.c  | 12 ++++++------
 trust/parser.c |  8 +++++---
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/common/asn1.c b/common/asn1.c
index 45d91ab..29cca3a 100644
--- a/common/asn1.c
+++ b/common/asn1.c
@@ -142,18 +142,18 @@ p11_asn1_decode (p11_dict *asn1_defs,
 
 	return_val_if_fail (asn1_defs != NULL, NULL);
 
-	if (message == NULL)
-		message = msg;
-
 	asn = p11_asn1_create (asn1_defs, struct_name);
 	return_val_if_fail (asn != NULL, NULL);
 
 	/* asn1_der_decoding destroys the element if fails */
-	ret = asn1_der_decoding (&asn, der, der_len, message);
+	ret = asn1_der_decoding (&asn, der, der_len, message ? message : msg);
 
 	if (ret != ASN1_SUCCESS) {
-		p11_debug ("couldn't parse %s: %s: %s",
-		           struct_name, asn1_strerror (ret), message);
+		/* If caller passed in a message buffer, assume they're logging */
+		if (!message) {
+			p11_debug ("couldn't parse %s: %s: %s",
+			           struct_name, asn1_strerror (ret), msg);
+		}
 		return NULL;
 	}
 
diff --git a/trust/parser.c b/trust/parser.c
index b2555b1..7690d6a 100644
--- a/trust/parser.c
+++ b/trust/parser.c
@@ -264,13 +264,14 @@ parse_der_x509_certificate (p11_parser *parser,
                             const unsigned char *data,
                             size_t length)
 {
+	char message[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
 	CK_BYTE idv[ID_LENGTH];
 	CK_ATTRIBUTE id = { CKA_ID, idv, sizeof (idv) };
 	CK_ATTRIBUTE *attrs;
 	CK_ATTRIBUTE *value;
 	node_asn *cert;
 
-	cert = p11_asn1_decode (parser->asn1_defs, "PKIX1.Certificate", data, length, NULL);
+	cert = p11_asn1_decode (parser->asn1_defs, "PKIX1.Certificate", data, length, message);
 	if (cert == NULL)
 		return P11_PARSE_UNRECOGNIZED;
 
@@ -557,6 +558,7 @@ parse_openssl_trusted_certificate (p11_parser *parser,
                                    const unsigned char *data,
                                    size_t length)
 {
+	char message[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
 	CK_ATTRIBUTE *attrs;
 	CK_BYTE idv[ID_LENGTH];
 	CK_ATTRIBUTE id = { CKA_ID, idv, sizeof (idv) };
@@ -579,11 +581,11 @@ parse_openssl_trusted_certificate (p11_parser *parser,
 	if (cert_len <= 0)
 		return P11_PARSE_UNRECOGNIZED;
 
-	cert = p11_asn1_decode (parser->asn1_defs, "PKIX1.Certificate", data, cert_len, NULL);
+	cert = p11_asn1_decode (parser->asn1_defs, "PKIX1.Certificate", data, cert_len, message);
 	if (cert == NULL)
 		return P11_PARSE_UNRECOGNIZED;
 
-	aux = p11_asn1_decode (parser->asn1_defs, "OPENSSL.CertAux", data + cert_len, length - cert_len, NULL);
+	aux = p11_asn1_decode (parser->asn1_defs, "OPENSSL.CertAux", data + cert_len, length - cert_len, message);
 	if (aux == NULL) {
 		asn1_delete_structure (&cert);
 		return P11_PARSE_UNRECOGNIZED;
-- 
2.40.0