Skip to content

Commit 447bbd0

Browse files
LiviaMedeirosbengl
authored andcommitted
tls: fix convertALPNProtocols accepting ArrayBufferViews
PR-URL: #43211 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
1 parent 0098933 commit 447bbd0

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

lib/tls.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ const {
5454
} = require('internal/errors').codes;
5555
const internalUtil = require('internal/util');
5656
internalUtil.assertCrypto();
57-
const { isArrayBufferView } = require('internal/util/types');
57+
const {
58+
isArrayBufferView,
59+
isDataView,
60+
isUint8Array,
61+
} = require('internal/util/types');
5862

5963
const net = require('net');
6064
const { getOptionValue } = require('internal/options');
@@ -143,9 +147,16 @@ exports.convertALPNProtocols = function convertALPNProtocols(protocols, out) {
143147
// If protocols is Array - translate it into buffer
144148
if (ArrayIsArray(protocols)) {
145149
out.ALPNProtocols = convertProtocols(protocols);
146-
} else if (isArrayBufferView(protocols)) {
150+
} else if (Buffer.isBuffer(protocols) || isUint8Array(protocols)) {
147151
// Copy new buffer not to be modified by user.
148152
out.ALPNProtocols = Buffer.from(protocols);
153+
} else if (isDataView(protocols)) {
154+
out.ALPNProtocols = Buffer.from(protocols.buffer.slice(
155+
protocols.byteOffset,
156+
protocols.byteOffset + protocols.byteLength
157+
));
158+
} else if (isArrayBufferView(protocols)) {
159+
out.ALPNProtocols = Buffer.from(protocols.slice().buffer);
149160
}
150161
};
151162

test/parallel/test-tls-basic-validations.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,11 @@ assert.throws(
103103
const inputBuffer = Buffer.from(arrayBufferViewStr.repeat(8), 'utf8');
104104
for (const expectView of common.getArrayBufferViews(inputBuffer)) {
105105
const out = {};
106+
const expected = Buffer.from(expectView.buffer.slice(),
107+
expectView.byteOffset,
108+
expectView.byteLength);
106109
tls.convertALPNProtocols(expectView, out);
107-
assert(out.ALPNProtocols.equals(Buffer.from(expectView)));
110+
assert(out.ALPNProtocols.equals(expected));
108111
}
109112
}
110113

0 commit comments

Comments
 (0)