Skip to content

Commit e90af29

Browse files
bnoordhuisaddaleax
authored andcommitted
tls: fix empty issuer/subject/infoAccess parsing
Also issuerCertificate but that did not fit on the status line. Fixes: #11771 PR-URL: #14473 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Refael Ackermann <[email protected]>
1 parent eb7faf6 commit e90af29

File tree

2 files changed

+59
-4
lines changed

2 files changed

+59
-4
lines changed

lib/_tls_common.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,12 @@ exports.translatePeerCertificate = function translatePeerCertificate(c) {
169169
if (!c)
170170
return null;
171171

172-
if (c.issuer) c.issuer = tls.parseCertString(c.issuer);
173-
if (c.issuerCertificate && c.issuerCertificate !== c) {
172+
if (c.issuer != null) c.issuer = tls.parseCertString(c.issuer);
173+
if (c.issuerCertificate != null && c.issuerCertificate !== c) {
174174
c.issuerCertificate = translatePeerCertificate(c.issuerCertificate);
175175
}
176-
if (c.subject) c.subject = tls.parseCertString(c.subject);
177-
if (c.infoAccess) {
176+
if (c.subject != null) c.subject = tls.parseCertString(c.subject);
177+
if (c.infoAccess != null) {
178178
var info = c.infoAccess;
179179
c.infoAccess = {};
180180

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
'use strict';
2+
const common = require('../common');
3+
4+
if (!common.hasCrypto)
5+
common.skip('missing crypto');
6+
7+
const { strictEqual, deepStrictEqual } = require('assert');
8+
const { translatePeerCertificate } = require('_tls_common');
9+
10+
const certString = 'A=1\nB=2\nC=3';
11+
const certObject = { A: '1', B: '2', C: '3' };
12+
13+
strictEqual(translatePeerCertificate(null), null);
14+
strictEqual(translatePeerCertificate(undefined), null);
15+
16+
strictEqual(translatePeerCertificate(0), null);
17+
strictEqual(translatePeerCertificate(1), 1);
18+
19+
deepStrictEqual(translatePeerCertificate({}), {});
20+
21+
deepStrictEqual(translatePeerCertificate({ issuer: '' }),
22+
{ issuer: {} });
23+
deepStrictEqual(translatePeerCertificate({ issuer: null }),
24+
{ issuer: null });
25+
deepStrictEqual(translatePeerCertificate({ issuer: certString }),
26+
{ issuer: certObject });
27+
28+
deepStrictEqual(translatePeerCertificate({ subject: '' }),
29+
{ subject: {} });
30+
deepStrictEqual(translatePeerCertificate({ subject: null }),
31+
{ subject: null });
32+
deepStrictEqual(translatePeerCertificate({ subject: certString }),
33+
{ subject: certObject });
34+
35+
deepStrictEqual(translatePeerCertificate({ issuerCertificate: '' }),
36+
{ issuerCertificate: null });
37+
deepStrictEqual(translatePeerCertificate({ issuerCertificate: null }),
38+
{ issuerCertificate: null });
39+
deepStrictEqual(
40+
translatePeerCertificate({ issuerCertificate: { subject: certString } }),
41+
{ issuerCertificate: { subject: certObject } });
42+
43+
{
44+
const cert = {};
45+
cert.issuerCertificate = cert;
46+
deepStrictEqual(translatePeerCertificate(cert), { issuerCertificate: cert });
47+
}
48+
49+
deepStrictEqual(translatePeerCertificate({ infoAccess: '' }),
50+
{ infoAccess: {} });
51+
deepStrictEqual(translatePeerCertificate({ infoAccess: null }),
52+
{ infoAccess: null });
53+
deepStrictEqual(
54+
translatePeerCertificate({ infoAccess: 'OCSP - URI:file:///etc/passwd' }),
55+
{ infoAccess: { 'OCSP - URI': ['file:///etc/passwd'] } });

0 commit comments

Comments
 (0)