|
@@ -139,7 +139,7 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
|
|
|
if (*out) {
|
|
|
free_out = 0;
|
|
|
dest = *out;
|
|
|
- ASN1_STRING_set0(dest, NULL, 0);
|
|
|
+ ASN1_STRING_set0(dest, NULL, 0);
|
|
|
dest->type = str_type;
|
|
|
} else {
|
|
|
free_out = 1;
|
|
@@ -153,6 +153,10 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
|
|
|
/* If both the same type just copy across */
|
|
|
if (inform == outform) {
|
|
|
if (!ASN1_STRING_set(dest, in, len)) {
|
|
|
+ if (free_out) {
|
|
|
+ ASN1_STRING_free(dest);
|
|
|
+ *out = NULL;
|
|
|
+ }
|
|
|
ERR_raise(ERR_LIB_ASN1, ERR_R_ASN1_LIB);
|
|
|
return -1;
|
|
|
}
|
|
@@ -183,8 +187,10 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
|
|
|
break;
|
|
|
}
|
|
|
if ((p = OPENSSL_malloc(outlen + 1)) == NULL) {
|
|
|
- if (free_out)
|
|
|
+ if (free_out) {
|
|
|
ASN1_STRING_free(dest);
|
|
|
+ *out = NULL;
|
|
|
+ }
|
|
|
return -1;
|
|
|
}
|
|
|
dest->length = outlen;
|