support embed in ASN.1 print
authorDr. Stephen Henson <steve@openssl.org>
Wed, 4 May 2016 13:50:14 +0000 (14:50 +0100)
committerDr. Stephen Henson <steve@openssl.org>
Wed, 4 May 2016 19:09:02 +0000 (20:09 +0100)
Reviewed-by: Richard Levitte <levitte@openssl.org>
crypto/asn1/tasn_prn.c

index f6bd2189cf28ff249713b8ee26c834982fa3dadd..7a96aca9626948a68b2f553764890e24108f4851 100644 (file)
@@ -314,6 +314,7 @@ int asn1_template_print_ctx(BIO *out, ASN1_VALUE **fld, int indent,
 {
     int i, flags;
     const char *sname, *fname;
+    ASN1_VALUE *tfld;
     flags = tt->flags;
     if (pctx->flags & ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME)
         sname = ASN1_ITEM_ptr(tt->item)->sname;
@@ -323,6 +324,16 @@ int asn1_template_print_ctx(BIO *out, ASN1_VALUE **fld, int indent,
         fname = NULL;
     else
         fname = tt->field_name;
+
+    /*
+     * If field is embedded then fld needs fixing so it is a pointer to
+     * a pointer to a field.
+     */
+    if (flags & ASN1_TFLG_EMBED) {
+        tfld = (ASN1_VALUE *)fld;
+        fld = &tfld;
+    }
+
     if (flags & ASN1_TFLG_SK_MASK) {
         char *tname;
         ASN1_VALUE *skitem;