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