Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 4affc30

Browse filesBrowse files
tniessenaddaleax
authored andcommitted
crypto: automatically manage memory for ECDSA_SIG
Refs: #29292 PR-URL: #30641 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Anna Henningsen <anna@addaleax.net>
1 parent fc11db1 commit 4affc30
Copy full SHA for 4affc30

File tree

Expand file treeCollapse file tree

2 files changed

+9
-11
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+9
-11
lines changed
Open diff view settings
Collapse file

‎src/node_crypto.cc‎

Copy file name to clipboardExpand all lines: src/node_crypto.cc
+8-11Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5039,20 +5039,18 @@ static AllocatedBuffer ConvertSignatureToP1363(Environment* env,
50395039
const unsigned char* sig_data =
50405040
reinterpret_cast<unsigned char*>(signature.data());
50415041

5042-
ECDSA_SIG* asn1_sig = d2i_ECDSA_SIG(nullptr, &sig_data, signature.size());
5043-
if (asn1_sig == nullptr)
5042+
ECDSASigPointer asn1_sig(d2i_ECDSA_SIG(nullptr, &sig_data, signature.size()));
5043+
if (!asn1_sig)
50445044
return AllocatedBuffer();
50455045

50465046
AllocatedBuffer buf = env->AllocateManaged(2 * n);
50475047
unsigned char* data = reinterpret_cast<unsigned char*>(buf.data());
50485048

5049-
const BIGNUM* r = ECDSA_SIG_get0_r(asn1_sig);
5050-
const BIGNUM* s = ECDSA_SIG_get0_s(asn1_sig);
5049+
const BIGNUM* r = ECDSA_SIG_get0_r(asn1_sig.get());
5050+
const BIGNUM* s = ECDSA_SIG_get0_s(asn1_sig.get());
50515051
CHECK_EQ(n, static_cast<unsigned int>(BN_bn2binpad(r, data, n)));
50525052
CHECK_EQ(n, static_cast<unsigned int>(BN_bn2binpad(s, data + n, n)));
50535053

5054-
ECDSA_SIG_free(asn1_sig);
5055-
50565054
return buf;
50575055
}
50585056

@@ -5069,19 +5067,18 @@ static ByteSource ConvertSignatureToDER(
50695067
if (signature.length() != 2 * n)
50705068
return ByteSource();
50715069

5072-
ECDSA_SIG* asn1_sig = ECDSA_SIG_new();
5073-
CHECK_NOT_NULL(asn1_sig);
5070+
ECDSASigPointer asn1_sig(ECDSA_SIG_new());
5071+
CHECK(asn1_sig);
50745072
BIGNUM* r = BN_new();
50755073
CHECK_NOT_NULL(r);
50765074
BIGNUM* s = BN_new();
50775075
CHECK_NOT_NULL(s);
50785076
CHECK_EQ(r, BN_bin2bn(sig_data, n, r));
50795077
CHECK_EQ(s, BN_bin2bn(sig_data + n, n, s));
5080-
CHECK_EQ(1, ECDSA_SIG_set0(asn1_sig, r, s));
5078+
CHECK_EQ(1, ECDSA_SIG_set0(asn1_sig.get(), r, s));
50815079

50825080
unsigned char* data = nullptr;
5083-
int len = i2d_ECDSA_SIG(asn1_sig, &data);
5084-
ECDSA_SIG_free(asn1_sig);
5081+
int len = i2d_ECDSA_SIG(asn1_sig.get(), &data);
50855082

50865083
if (len <= 0)
50875084
return ByteSource();
Collapse file

‎src/node_crypto.h‎

Copy file name to clipboardExpand all lines: src/node_crypto.h
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ using ECGroupPointer = DeleteFnPtr<EC_GROUP, EC_GROUP_free>;
7272
using ECPointPointer = DeleteFnPtr<EC_POINT, EC_POINT_free>;
7373
using ECKeyPointer = DeleteFnPtr<EC_KEY, EC_KEY_free>;
7474
using DHPointer = DeleteFnPtr<DH, DH_free>;
75+
using ECDSASigPointer = DeleteFnPtr<ECDSA_SIG, ECDSA_SIG_free>;
7576

7677
extern int VerifyCallback(int preverify_ok, X509_STORE_CTX* ctx);
7778

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.