replace some more allocate + strlcat with asprintf Change-Id: Id8447847e3cf6a48123cb625762ecbc4ddad8f16 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/74907 Reviewed-by: Adam Langley <agl@google.com> Commit-Queue: Bob Beck <bbe@google.com>
diff --git a/crypto/x509/v3_utl.cc b/crypto/x509/v3_utl.cc index d2a6149..9f4aba9 100644 --- a/crypto/x509/v3_utl.cc +++ b/crypto/x509/v3_utl.cc
@@ -119,7 +119,6 @@ static char *bignum_to_string(const BIGNUM *bn) { char *tmp, *ret; - size_t len; // Display large numbers in hex and small numbers in decimal. Converting to // decimal takes quadratic time and is no more useful than hex for large @@ -133,20 +132,10 @@ return NULL; } - len = strlen(tmp) + 3; - ret = reinterpret_cast<char *>(OPENSSL_malloc(len)); - if (ret == NULL) { - OPENSSL_free(tmp); - return NULL; - } - // Prepend "0x", but place it after the "-" if negative. - if (tmp[0] == '-') { - OPENSSL_strlcpy(ret, "-0x", len); - OPENSSL_strlcat(ret, tmp + 1, len); - } else { - OPENSSL_strlcpy(ret, "0x", len); - OPENSSL_strlcat(ret, tmp, len); + if (OPENSSL_asprintf(&ret, "%s0x%s", (tmp[0] == '-') ? "-" : "", + (tmp[0] == '-') ? tmp + 1 : tmp) == -1) { + ret = nullptr; } OPENSSL_free(tmp); return ret;