| Index: openssl/crypto/asn1/asn1_lib.c
|
| ===================================================================
|
| --- openssl/crypto/asn1/asn1_lib.c (revision 105093)
|
| +++ openssl/crypto/asn1/asn1_lib.c (working copy)
|
| @@ -340,20 +340,31 @@
|
| return(1);
|
| }
|
|
|
| -ASN1_STRING *ASN1_STRING_dup(ASN1_STRING *str)
|
| +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str)
|
| {
|
| + if (str == NULL)
|
| + return 0;
|
| + dst->type = str->type;
|
| + if (!ASN1_STRING_set(dst,str->data,str->length))
|
| + return 0;
|
| + dst->flags = str->flags;
|
| + return 1;
|
| + }
|
| +
|
| +ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *str)
|
| + {
|
| ASN1_STRING *ret;
|
| -
|
| - if (str == NULL) return(NULL);
|
| - if ((ret=ASN1_STRING_type_new(str->type)) == NULL)
|
| - return(NULL);
|
| - if (!ASN1_STRING_set(ret,str->data,str->length))
|
| + if (!str)
|
| + return NULL;
|
| + ret=ASN1_STRING_new();
|
| + if (!ret)
|
| + return NULL;
|
| + if (!ASN1_STRING_copy(ret,str))
|
| {
|
| ASN1_STRING_free(ret);
|
| - return(NULL);
|
| + return NULL;
|
| }
|
| - ret->flags = str->flags;
|
| - return(ret);
|
| + return ret;
|
| }
|
|
|
| int ASN1_STRING_set(ASN1_STRING *str, const void *_data, int len)
|
| @@ -427,11 +438,12 @@
|
| void ASN1_STRING_free(ASN1_STRING *a)
|
| {
|
| if (a == NULL) return;
|
| - if (a->data != NULL) OPENSSL_free(a->data);
|
| + if (a->data && !(a->flags & ASN1_STRING_FLAG_NDEF))
|
| + OPENSSL_free(a->data);
|
| OPENSSL_free(a);
|
| }
|
|
|
| -int ASN1_STRING_cmp(ASN1_STRING *a, ASN1_STRING *b)
|
| +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b)
|
| {
|
| int i;
|
|
|
| @@ -457,7 +469,7 @@
|
| ERR_add_error_data(4,"address=",buf1," offset=",buf2);
|
| }
|
|
|
| -int ASN1_STRING_length(ASN1_STRING *x)
|
| +int ASN1_STRING_length(const ASN1_STRING *x)
|
| { return M_ASN1_STRING_length(x); }
|
|
|
| void ASN1_STRING_length_set(ASN1_STRING *x, int len)
|
|
|