diff --git a/crypto/x509/x_name.c b/crypto/x509/x_name.c index 5e6abebbea67504bc5cb8755ee2ed4044b42c7dc..cd6c719044ccc6a9870ee189bef00b6b554dda34 100644 --- a/crypto/x509/x_name.c +++ b/crypto/x509/x_name.c @@ -335,7 +335,7 @@ static int x509_name_canon(X509_NAME *a) STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL; STACK_OF(X509_NAME_ENTRY) *entries = NULL; X509_NAME_ENTRY *entry, *tmpentry = NULL; - int i, set = -1, ret = 0; + int i, set = -1, ret = 0, len; OPENSSL_free(a->canon_enc); a->canon_enc = NULL; @@ -370,7 +370,10 @@ static int x509_name_canon(X509_NAME *a) /* Finally generate encoding */ - a->canon_enclen = i2d_name_canon(intname, NULL); + len = i2d_name_canon(intname, NULL); + if (len < 0) + goto err; + a->canon_enclen = len; p = OPENSSL_malloc(a->canon_enclen);