diff --git a/src/crypto/crypto_x509.cc b/src/crypto/crypto_x509.cc index 14825742e986..a1cbeb794539 100644 --- a/src/crypto/crypto_x509.cc +++ b/src/crypto/crypto_x509.cc @@ -699,9 +699,10 @@ MaybeLocal GetECGroupBits(Environment* env, const EC_GROUP* group) { template MaybeLocal GetCurveName(Environment* env, const int nid) { - std::string_view name = nid2string(nid); - return name.size() ? MaybeLocal(OneByteString(env->isolate(), name)) - : MaybeLocal(Undefined(env->isolate())); + const char* name = nid2string(nid); + return name != nullptr + ? MaybeLocal(OneByteString(env->isolate(), name)) + : MaybeLocal(Undefined(env->isolate())); } MaybeLocal X509ToObject(Environment* env, const X509View& cert) { diff --git a/test/parallel/test-crypto-x509.js b/test/parallel/test-crypto-x509.js index c8f44372f975..c26033548975 100644 --- a/test/parallel/test-crypto-x509.js +++ b/test/parallel/test-crypto-x509.js @@ -514,3 +514,22 @@ CQAAAAAAAAAAAA== assert.strictEqual(cert.signatureAlgorithm, undefined); assert.strictEqual(cert.signatureAlgorithmOid, '1.3.6.1.4.1.99999.1'); } + +if (!isBoringSSL) { + // EC certificate on a curve without a NIST name (brainpoolP256r1). + const certPem = `-----BEGIN CERTIFICATE----- +MIIBfzCCASagAwIBAgIUcZKohGvML9PeBwQtylddAdUU3nkwCgYIKoZIzj0EAwIw +FDESMBAGA1UEAwwJYnJhaW5wb29sMCAXDTI2MTAxMjE0NDczMVoYDzIxMjYwOTE4 +MTQ0NzMxWjAUMRIwEAYDVQQDDAlicmFpbnBvb2wwWjAUBgcqhkjOPQIBBgkrJAMD +AggBAQcDQgAEKnP14jKQEUyWxWhXrs+ql7OlMy0EW3mnYTvwkF8VyYsPB9dBUJOW +8IHqIik0kjQVSVhtLH0j+hveyZvGd0aQq6NTMFEwHQYDVR0OBBYEFNx4uQEsAiNZ +zcrKuAZ9/9d1eIeDMB8GA1UdIwQYMBaAFNx4uQEsAiNZzcrKuAZ9/9d1eIeDMA8G +A1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDRwAwRAIgHc4TOjOLOPXrvWXRQ44L +jEVmV959vS0DtFIIsrGT3moCIBBRZWdLdd0YjFHUQshMZFM9BN2INpjFNUUxqPAC +3qPo +-----END CERTIFICATE-----`; + + const legacyObject = new X509Certificate(certPem).toLegacyObject(); + assert.ok([undefined, 'brainpoolP256r1'].includes(legacyObject.asn1Curve)); + assert.strictEqual(legacyObject.nistCurve, undefined); +}