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;