1/* eslint-disable no-proto */
2'use strict';
3const common = require('../common');
4
5if (!common.hasCrypto)
6  common.skip('missing crypto');
7
8const { strictEqual, deepStrictEqual } = require('assert');
9const { translatePeerCertificate } = require('_tls_common');
10
11const certString = '__proto__=42\nA=1\nB=2\nC=3';
12
13strictEqual(translatePeerCertificate(null), null);
14strictEqual(translatePeerCertificate(undefined), null);
15
16strictEqual(translatePeerCertificate(0), null);
17strictEqual(translatePeerCertificate(1), 1);
18
19deepStrictEqual(translatePeerCertificate({}), {});
20
21// Earlier versions of Node.js parsed the issuer property but did so
22// incorrectly. This behavior has now reached end-of-life and user-supplied
23// strings will not be parsed at all.
24deepStrictEqual(translatePeerCertificate({ issuer: '' }),
25                { issuer: '' });
26deepStrictEqual(translatePeerCertificate({ issuer: null }),
27                { issuer: null });
28deepStrictEqual(translatePeerCertificate({ issuer: certString }),
29                { issuer: certString });
30
31// Earlier versions of Node.js parsed the issuer property but did so
32// incorrectly. This behavior has now reached end-of-life and user-supplied
33// strings will not be parsed at all.
34deepStrictEqual(translatePeerCertificate({ subject: '' }),
35                { subject: '' });
36deepStrictEqual(translatePeerCertificate({ subject: null }),
37                { subject: null });
38deepStrictEqual(translatePeerCertificate({ subject: certString }),
39                { subject: certString });
40
41deepStrictEqual(translatePeerCertificate({ issuerCertificate: '' }),
42                { issuerCertificate: null });
43deepStrictEqual(translatePeerCertificate({ issuerCertificate: null }),
44                { issuerCertificate: null });
45deepStrictEqual(
46  translatePeerCertificate({ issuerCertificate: { subject: certString } }),
47  { issuerCertificate: { subject: certString } });
48
49{
50  const cert = {};
51  cert.issuerCertificate = cert;
52  deepStrictEqual(translatePeerCertificate(cert), { issuerCertificate: cert });
53}
54
55deepStrictEqual(translatePeerCertificate({ infoAccess: '' }),
56                { infoAccess: Object.create(null) });
57deepStrictEqual(translatePeerCertificate({ infoAccess: null }),
58                { infoAccess: null });
59{
60  const input =
61      '__proto__:mostly harmless\n' +
62      'hasOwnProperty:not a function\n' +
63      'OCSP - URI:file:///etc/passwd\n';
64  const expected = Object.create(null);
65  expected.__proto__ = ['mostly harmless'];
66  expected.hasOwnProperty = ['not a function'];
67  expected['OCSP - URI'] = ['file:///etc/passwd'];
68  deepStrictEqual(translatePeerCertificate({ infoAccess: input }),
69                  { infoAccess: expected });
70}
71