summaryrefslogtreecommitdiff
path: root/crypto/x509v3/v3_prn.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2000-12-13 13:47:33 +0000
committerDr. Stephen Henson <steve@openssl.org>2000-12-13 13:47:33 +0000
commit2aff7727f700384de6ced15a97888a8405cb1214 (patch)
treeaa5c50faad985a6acf8f1373d5dcd99f0cade1ca /crypto/x509v3/v3_prn.c
parentcc93ae3ef4f76bcf64164ef3f83854bdfd4a074e (diff)
downloadopenssl-new-2aff7727f700384de6ced15a97888a8405cb1214.tar.gz
Rewrite the extension code to use an ASN1_ITEM structure
for its ASN1 operations as well as the old style function pointers (i2d, d2i, new, free). Change standard extensions to support this. Fix a warning in BN_mul(), bn_mul.c about uninitialised 'j'.
Diffstat (limited to 'crypto/x509v3/v3_prn.c')
-rw-r--r--crypto/x509v3/v3_prn.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/crypto/x509v3/v3_prn.c b/crypto/x509v3/v3_prn.c
index 5416f662d3..ae1b7c81c0 100644
--- a/crypto/x509v3/v3_prn.c
+++ b/crypto/x509v3/v3_prn.c
@@ -100,7 +100,8 @@ void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, int ml)
int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int indent)
{
- char *ext_str = NULL, *value = NULL;
+ void *ext_str = NULL;
+ char *value = NULL;
unsigned char *p;
X509V3_EXT_METHOD *method;
STACK_OF(CONF_VALUE) *nval = NULL;
@@ -108,8 +109,11 @@ int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int inde
if(!(method = X509V3_EXT_get(ext)))
return unknown_ext_print(out, ext, flag, indent, 0);
p = ext->value->data;
- if(!(ext_str = method->d2i(NULL, &p, ext->value->length)))
- return unknown_ext_print(out, ext, flag, indent, 1);
+ if(method->it) ext_str = ASN1_item_d2i(NULL, &p, ext->value->length, method->it);
+ else ext_str = method->d2i(NULL, &p, ext->value->length);
+
+ if(!ext_str) unknown_ext_print(out, ext, flag, indent, 1);
+
if(method->i2s) {
if(!(value = method->i2s(method, ext_str))) {
ok = 0;
@@ -138,7 +142,8 @@ int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int inde
err:
sk_CONF_VALUE_pop_free(nval, X509V3_conf_free);
if(value) OPENSSL_free(value);
- method->ext_free(ext_str);
+ if(method->it) ASN1_item_free(ext_str, method->it);
+ else method->ext_free(ext_str);
return ok;
}