diff --git a/lib/tls.js b/lib/tls.js index de20505fde242b..3bd3d7140c489f 100644 --- a/lib/tls.js +++ b/lib/tls.js @@ -54,7 +54,10 @@ const { } = require('internal/errors').codes; const internalUtil = require('internal/util'); internalUtil.assertCrypto(); -const { isArrayBufferView } = require('internal/util/types'); +const { + isArrayBufferView, + isUint8Array, +} = require('internal/util/types'); const net = require('net'); const { getOptionValue } = require('internal/options'); @@ -143,9 +146,13 @@ exports.convertALPNProtocols = function convertALPNProtocols(protocols, out) { // If protocols is Array - translate it into buffer if (ArrayIsArray(protocols)) { out.ALPNProtocols = convertProtocols(protocols); - } else if (isArrayBufferView(protocols)) { + } else if (Buffer.isBuffer(protocols) || isUint8Array(protocols)) { // Copy new buffer not to be modified by user. out.ALPNProtocols = Buffer.from(protocols); + } else if (isArrayBufferView(protocols)) { + out.ALPNProtocols = Buffer.from(protocols.buffer.slice(), + protocols.byteOffset, + protocols.byteLength); } }; diff --git a/test/parallel/test-tls-basic-validations.js b/test/parallel/test-tls-basic-validations.js index 67058daf158cd0..5e6486c214d41d 100644 --- a/test/parallel/test-tls-basic-validations.js +++ b/test/parallel/test-tls-basic-validations.js @@ -103,8 +103,16 @@ assert.throws( const inputBuffer = Buffer.from(arrayBufferViewStr.repeat(8), 'utf8'); for (const expectView of common.getArrayBufferViews(inputBuffer)) { const out = {}; + let expected; + if (expectView.constructor === Uint8Array) { + expected = Buffer.from(expectView); + } else { + expected = Buffer.from(expectView.buffer.slice(), + expectView.byteOffset, + expectView.byteLength); + } tls.convertALPNProtocols(expectView, out); - assert(out.ALPNProtocols.equals(Buffer.from(expectView))); + assert(out.ALPNProtocols.equals(expected)); } }