Chromium Code Reviews| Index: crypto/ec_signature_creator_nss.cc |
| diff --git a/crypto/ec_signature_creator_nss.cc b/crypto/ec_signature_creator_nss.cc |
| index 147535b28e9a1d3de08bec3ffa13c141c567bf6d..933f1cccf3d329c033d8240056133bedf9ce1696 100644 |
| --- a/crypto/ec_signature_creator_nss.cc |
| +++ b/crypto/ec_signature_creator_nss.cc |
| @@ -18,8 +18,7 @@ namespace crypto { |
| namespace { |
| -SECStatus SignData(PLArenaPool* arena, |
| - SECItem* result, |
| +SECStatus SignData(SECItem* result, |
| SECItem* input, |
| SECKEYPrivateKey* key, |
| HASH_HashType hash_type) { |
| @@ -72,27 +71,23 @@ bool ECSignatureCreator::Sign(const uint8* data, |
| secret.len = data_len; |
| secret.data = const_cast<unsigned char*>(data); |
| - // |arena| is used to encode the cert. |
| - crypto::ScopedPLArenaPool arena(PORT_NewArena(DER_DEFAULT_CHUNKSIZE)); |
| - CHECK(arena.get() != NULL); |
| - |
| - // Allocate space to contain the signed data. |
| - SECItem* result = SECITEM_AllocItem(arena.get(), NULL, 0); |
| - if (!result) { |
| - DLOG(ERROR) << "Unable to allocate space for signed data."; |
| - return false; |
| - } |
| + // SECItem to receive the output buffer. |
| + SECItem result; |
| + result.type = siBuffer; |
| + result.len = 0; |
| + result.data = NULL; |
| // Sign the secret data and save it to |result|. |
| SECStatus rv = |
| - SignData(arena.get(), result, &secret, key_->key(), HASH_AlgSHA1); |
| + SignData(&result, &secret, key_->key(), HASH_AlgSHA1); |
| if (rv != SECSuccess) { |
| DLOG(ERROR) << "DerSignData: " << PORT_GetError(); |
| return false; |
| } |
| // Copy the signed data into the output vector. |
| - signature->assign(result->data, result->data + result->len); |
| + signature->assign(result.data, result.data + result.len); |
| + SECITEM_FreeItem(&result, PR_FALSE /* only free |result.data| */); |
|
wtc
2012/01/31 18:43:57
You can also just do
PORT_Free(result.data);
to
|
| return true; |
| } |