diff --git a/libseckey/sk_utilities.c b/libseckey/sk_utilities.c index 16f88d85..e1c7f28c 100644 --- a/libseckey/sk_utilities.c +++ b/libseckey/sk_utilities.c @@ -776,6 +776,10 @@ int SK_UTIL_build_ecdsa_signature(const unsigned char *raw_sig, bn_s = NULL; der_len = i2d_ECDSA_SIG(ec_sig, NULL); + if (der_len <= 0) { + rc = -EIO; + goto out; + } if (sig == NULL) { *sig_len = der_len; @@ -788,13 +792,14 @@ int SK_UTIL_build_ecdsa_signature(const unsigned char *raw_sig, memset(sig, 0, *sig_len); der = sig; - *sig_len = i2d_ECDSA_SIG(ec_sig, &der); - - if (*sig_len == 0) { + der_len = i2d_ECDSA_SIG(ec_sig, &der); + if (der_len <= 0) { rc = -EIO; goto out; } + *sig_len = der_len; + out: if (ec_sig != NULL) ECDSA_SIG_free(ec_sig);