Index: openssl/crypto/x509/x509_req.c |
=================================================================== |
--- openssl/crypto/x509/x509_req.c (revision 105093) |
+++ openssl/crypto/x509/x509_req.c (working copy) |
@@ -61,6 +61,7 @@ |
#include <openssl/bn.h> |
#include <openssl/evp.h> |
#include <openssl/asn1.h> |
+#include <openssl/asn1t.h> |
#include <openssl/x509.h> |
#include <openssl/objects.h> |
#include <openssl/buffer.h> |
@@ -205,10 +206,9 @@ |
if(!ext || (ext->type != V_ASN1_SEQUENCE)) |
return NULL; |
p = ext->value.sequence->data; |
- return d2i_ASN1_SET_OF_X509_EXTENSION(NULL, &p, |
- ext->value.sequence->length, |
- d2i_X509_EXTENSION, X509_EXTENSION_free, |
- V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL); |
+ return (STACK_OF(X509_EXTENSION) *) |
+ ASN1_item_d2i(NULL, &p, ext->value.sequence->length, |
+ ASN1_ITEM_rptr(X509_EXTENSIONS)); |
} |
/* Add a STACK_OF extensions to a certificate request: allow alternative OIDs |
@@ -218,8 +218,6 @@ |
int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, |
int nid) |
{ |
- unsigned char *p = NULL, *q; |
- long len; |
ASN1_TYPE *at = NULL; |
X509_ATTRIBUTE *attr = NULL; |
if(!(at = ASN1_TYPE_new()) || |
@@ -227,15 +225,10 @@ |
at->type = V_ASN1_SEQUENCE; |
/* Generate encoding of extensions */ |
- len = i2d_ASN1_SET_OF_X509_EXTENSION(exts, NULL, i2d_X509_EXTENSION, |
- V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL, IS_SEQUENCE); |
- if(!(p = OPENSSL_malloc(len))) goto err; |
- q = p; |
- i2d_ASN1_SET_OF_X509_EXTENSION(exts, &q, i2d_X509_EXTENSION, |
- V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL, IS_SEQUENCE); |
- at->value.sequence->data = p; |
- p = NULL; |
- at->value.sequence->length = len; |
+ at->value.sequence->length = |
+ ASN1_item_i2d((ASN1_VALUE *)exts, |
+ &at->value.sequence->data, |
+ ASN1_ITEM_rptr(X509_EXTENSIONS)); |
if(!(attr = X509_ATTRIBUTE_new())) goto err; |
if(!(attr->value.set = sk_ASN1_TYPE_new_null())) goto err; |
if(!sk_ASN1_TYPE_push(attr->value.set, at)) goto err; |
@@ -250,7 +243,6 @@ |
if(!sk_X509_ATTRIBUTE_push(req->req_info->attributes, attr)) goto err; |
return 1; |
err: |
- if(p) OPENSSL_free(p); |
X509_ATTRIBUTE_free(attr); |
ASN1_TYPE_free(at); |
return 0; |