Skip to content

Commit f0f8115

Browse files
authored
crypto: fix X509 curve name crash for non-NIST curves
Signed-off-by: lazerg <lazerg2@gmail.com> Assisted-by: Claude Code PR-URL: #66694 Fixes: #66681 Reviewed-By: Filip Skokan <panva.ip@gmail.com> Reviewed-By: Tim Perry <pimterry@gmail.com>
1 parent 12ce819 commit f0f8115

2 files changed

Lines changed: 23 additions & 3 deletions

File tree

‎src/crypto/crypto_x509.cc‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -699,9 +699,10 @@ MaybeLocal<Value> GetECGroupBits(Environment* env, const EC_GROUP* group) {
699699

700700
template <const char* (*nid2string)(int nid)>
701701
MaybeLocal<Value> GetCurveName(Environment* env, const int nid) {
702-
std::string_view name = nid2string(nid);
703-
return name.size() ? MaybeLocal<Value>(OneByteString(env->isolate(), name))
704-
: MaybeLocal<Value>(Undefined(env->isolate()));
702+
const char* name = nid2string(nid);
703+
return name != nullptr
704+
? MaybeLocal<Value>(OneByteString(env->isolate(), name))
705+
: MaybeLocal<Value>(Undefined(env->isolate()));
705706
}
706707

707708
MaybeLocal<Object> X509ToObject(Environment* env, const X509View& cert) {

‎test/parallel/test-crypto-x509.js‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,3 +514,22 @@ CQAAAAAAAAAAAA==
514514
assert.strictEqual(cert.signatureAlgorithm, undefined);
515515
assert.strictEqual(cert.signatureAlgorithmOid, '1.3.6.1.4.1.99999.1');
516516
}
517+
518+
if (!isBoringSSL) {
519+
// EC certificate on a curve without a NIST name (brainpoolP256r1).
520+
const certPem = `-----BEGIN CERTIFICATE-----
521+
MIIBfzCCASagAwIBAgIUcZKohGvML9PeBwQtylddAdUU3nkwCgYIKoZIzj0EAwIw
522+
FDESMBAGA1UEAwwJYnJhaW5wb29sMCAXDTI2MTAxMjE0NDczMVoYDzIxMjYwOTE4
523+
MTQ0NzMxWjAUMRIwEAYDVQQDDAlicmFpbnBvb2wwWjAUBgcqhkjOPQIBBgkrJAMD
524+
AggBAQcDQgAEKnP14jKQEUyWxWhXrs+ql7OlMy0EW3mnYTvwkF8VyYsPB9dBUJOW
525+
8IHqIik0kjQVSVhtLH0j+hveyZvGd0aQq6NTMFEwHQYDVR0OBBYEFNx4uQEsAiNZ
526+
zcrKuAZ9/9d1eIeDMB8GA1UdIwQYMBaAFNx4uQEsAiNZzcrKuAZ9/9d1eIeDMA8G
527+
A1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDRwAwRAIgHc4TOjOLOPXrvWXRQ44L
528+
jEVmV959vS0DtFIIsrGT3moCIBBRZWdLdd0YjFHUQshMZFM9BN2INpjFNUUxqPAC
529+
3qPo
530+
-----END CERTIFICATE-----`;
531+
532+
const legacyObject = new X509Certificate(certPem).toLegacyObject();
533+
assert.ok([undefined, 'brainpoolP256r1'].includes(legacyObject.asn1Curve));
534+
assert.strictEqual(legacyObject.nistCurve, undefined);
535+
}

0 commit comments

Comments
 (0)