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'; 12const certObject = Object.create(null); 13certObject.__proto__ = '42'; 14certObject.A = '1'; 15certObject.B = '2'; 16certObject.C = '3'; 17 18strictEqual(translatePeerCertificate(null), null); 19strictEqual(translatePeerCertificate(undefined), null); 20 21strictEqual(translatePeerCertificate(0), null); 22strictEqual(translatePeerCertificate(1), 1); 23 24deepStrictEqual(translatePeerCertificate({}), {}); 25 26deepStrictEqual(translatePeerCertificate({ issuer: '' }), 27 { issuer: Object.create(null) }); 28deepStrictEqual(translatePeerCertificate({ issuer: null }), 29 { issuer: null }); 30deepStrictEqual(translatePeerCertificate({ issuer: certString }), 31 { issuer: certObject }); 32 33deepStrictEqual(translatePeerCertificate({ subject: '' }), 34 { subject: Object.create(null) }); 35deepStrictEqual(translatePeerCertificate({ subject: null }), 36 { subject: null }); 37deepStrictEqual(translatePeerCertificate({ subject: certString }), 38 { subject: certObject }); 39 40deepStrictEqual(translatePeerCertificate({ issuerCertificate: '' }), 41 { issuerCertificate: null }); 42deepStrictEqual(translatePeerCertificate({ issuerCertificate: null }), 43 { issuerCertificate: null }); 44deepStrictEqual( 45 translatePeerCertificate({ issuerCertificate: { subject: certString } }), 46 { issuerCertificate: { subject: certObject } }); 47 48{ 49 const cert = {}; 50 cert.issuerCertificate = cert; 51 deepStrictEqual(translatePeerCertificate(cert), { issuerCertificate: cert }); 52} 53 54deepStrictEqual(translatePeerCertificate({ infoAccess: '' }), 55 { infoAccess: Object.create(null) }); 56deepStrictEqual(translatePeerCertificate({ infoAccess: null }), 57 { infoAccess: null }); 58{ 59 const input = 60 '__proto__:mostly harmless\n' + 61 'hasOwnProperty:not a function\n' + 62 'OCSP - URI:file:///etc/passwd\n'; 63 const expected = Object.create(null); 64 expected.__proto__ = ['mostly harmless']; 65 expected.hasOwnProperty = ['not a function']; 66 expected['OCSP - URI'] = ['file:///etc/passwd']; 67 deepStrictEqual(translatePeerCertificate({ infoAccess: input }), 68 { infoAccess: expected }); 69} 70