Skip to content

Commit

Permalink
Fix an SECItem leak in the new ECSignatureCreator class.
Browse files Browse the repository at this point in the history
R=rch@chromium.org
BUG=111317
TEST=ran drmemory on ECSignatureCreator.BasicTest, no longer reports leak


Review URL: http://codereview.chromium.org/9302016

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@120085 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
rnk@chromium.org committed Feb 1, 2012
1 parent a8ef387 commit 0a6ea01
Showing 1 changed file with 9 additions and 14 deletions.
23 changes: 9 additions & 14 deletions crypto/ec_signature_creator_nss.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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| */);
return true;
}

Expand Down

0 comments on commit 0a6ea01

Please sign in to comment.