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

2 files changed

Lines changed: 17 additions & 3 deletions

File tree

‎lib/tls.js‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ const {
5454
}=require('internal/errors').codes;
5555
constinternalUtil=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
constnet=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-
}elseif(isArrayBufferView(protocols)){
150+
}elseif(Buffer.isBuffer(protocols)||isUint8Array(protocols)){
147151
// Copy new buffer not to be modified by user.
148152
out.ALPNProtocols=Buffer.from(protocols);
153+
}elseif(isDataView(protocols)){
154+
out.ALPNProtocols=Buffer.from(protocols.buffer.slice(
155+
protocols.byteOffset,
156+
protocols.byteOffset+protocols.byteLength
157+
));
158+
}elseif(isArrayBufferView(protocols)){
159+
out.ALPNProtocols=Buffer.from(protocols.slice().buffer);
149160
}
150161
};
151162

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,11 @@ assert.throws(
103103
constinputBuffer=Buffer.from(arrayBufferViewStr.repeat(8),'utf8');
104104
for(constexpectViewofcommon.getArrayBufferViews(inputBuffer)){
105105
constout={};
106+
constexpected=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)