diff options
author | Beni von Cheni <benjaminlchen@gmail.com> | 2018-10-01 22:52:30 -0400 |
---|---|---|
committer | Daniel Bevenius <daniel.bevenius@gmail.com> | 2018-10-08 08:29:33 +0200 |
commit | f5ab9d1765dab78516b16da4ca9ef670c7022328 (patch) | |
tree | e1644bd5fa78c5c6e8168529af162d764f487643 | |
parent | 1c75ec2c7eea6e1c667edd3268f0970dc1547e68 (diff) | |
download | android-node-v8-f5ab9d1765dab78516b16da4ca9ef670c7022328.tar.gz android-node-v8-f5ab9d1765dab78516b16da4ca9ef670c7022328.tar.bz2 android-node-v8-f5ab9d1765dab78516b16da4ca9ef670c7022328.zip |
tls: update test & docs for ArrayBuffer/DataView
In tls module, accept ArrayBuffer/DataView in place of isUint8Array in
the source code & related test code in "test-tls-basic-validations.js",
per the "tls" item in the checklist of the comment in #1826.
PR-URL: https://github.com/nodejs/node/pull/23210
Refs: https://github.com/nodejs/node/issues/1826
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
-rw-r--r-- | doc/api/tls.md | 35 | ||||
-rw-r--r-- | lib/tls.js | 4 | ||||
-rw-r--r-- | test/parallel/test-tls-basic-validations.js | 11 |
3 files changed, 29 insertions, 21 deletions
diff --git a/doc/api/tls.md b/doc/api/tls.md index 991c6e468f..0cba4653e7 100644 --- a/doc/api/tls.md +++ b/doc/api/tls.md @@ -856,7 +856,8 @@ changes: description: The `lookup` option is supported now. - version: v8.0.0 pr-url: https://github.com/nodejs/node/pull/11984 - description: The `ALPNProtocols` option can be a `Uint8Array` now. + description: The `ALPNProtocols` option can be a `TypedArray` or + `DataView` now. - version: v5.3.0, v4.7.0 pr-url: https://github.com/nodejs/node/pull/4246 description: The `secureContext` option is supported now. @@ -884,12 +885,14 @@ changes: verified against the list of supplied CAs. An `'error'` event is emitted if verification fails; `err.code` contains the OpenSSL error code. **Default:** `true`. - * `ALPNProtocols`: {string[]|Buffer[]|Uint8Array[]|Buffer|Uint8Array} - An array of strings, `Buffer`s or `Uint8Array`s, or a single `Buffer` or - `Uint8Array` containing the supported ALPN protocols. `Buffer`s should have - the format `[len][name][len][name]...` e.g. `0x05hello0x05world`, where the - first byte is the length of the next protocol name. Passing an array is - usually much simpler, e.g. `['hello', 'world']`. + * `ALPNProtocols`: {string[]|Buffer[]|TypedArray[]|DataView[]|Buffer| + TypedArray|DataView} + An array of strings, `Buffer`s or `TypedArray`s or `DataView`s, or a + single `Buffer` or `TypedArray` or `DataView` containing the supported ALPN + protocols. `Buffer`s should have the format `[len][name][len][name]...` + e.g. `0x05hello0x05world`, where the first byte is the length of the next + protocol name. Passing an array is usually much simpler, e.g. + `['hello', 'world']`. * `servername`: {string} Server name for the SNI (Server Name Indication) TLS extension. * `checkServerIdentity(servername, cert)` {Function} A callback function @@ -1134,20 +1137,22 @@ changes: description: The `options` parameter can now include `clientCertEngine`. - version: v8.0.0 pr-url: https://github.com/nodejs/node/pull/11984 - description: The `ALPNProtocols` option can be a `Uint8Array` now. + description: The `ALPNProtocols` option can be a `TypedArray` or + `DataView` now. - version: v5.0.0 pr-url: https://github.com/nodejs/node/pull/2564 description: ALPN options are supported now. --> * `options` {Object} - * `ALPNProtocols`: {string[]|Buffer[]|Uint8Array[]|Buffer|Uint8Array} - An array of strings, `Buffer`s or `Uint8Array`s, or a single `Buffer` or - `Uint8Array` containing the supported ALPN protocols. `Buffer`s should have - the format `[len][name][len][name]...` e.g. `0x05hello0x05world`, where the - first byte is the length of the next protocol name. Passing an array is - usually much simpler, e.g. `['hello', 'world']`. - (Protocols should be ordered by their priority.) + * `ALPNProtocols`: {string[]|Buffer[]|TypedArray[]|DataView[]|Buffer| + TypedArray|DataView} + An array of strings, `Buffer`s or `TypedArray`s or `DataView`s, or a single + `Buffer` or `TypedArray` or `DataView` containing the supported ALPN + protocols. `Buffer`s should have the format `[len][name][len][name]...` + e.g. `0x05hello0x05world`, where the first byte is the length of the next + protocol name. Passing an array is usually much simpler, e.g. + `['hello', 'world']`. (Protocols should be ordered by their priority.) * `clientCertEngine` {string} Name of an OpenSSL engine which can provide the client certificate. * `handshakeTimeout` {number} Abort the connection if the SSL/TLS handshake diff --git a/lib/tls.js b/lib/tls.js index 898e602807..f771a661d0 100644 --- a/lib/tls.js +++ b/lib/tls.js @@ -25,7 +25,7 @@ const { ERR_TLS_CERT_ALTNAME_INVALID } = require('internal/errors').codes; const internalUtil = require('internal/util'); const internalTLS = require('internal/tls'); internalUtil.assertCrypto(); -const { isUint8Array } = require('internal/util/types'); +const { isArrayBufferView } = require('internal/util/types'); const net = require('net'); const url = require('url'); @@ -78,7 +78,7 @@ exports.convertALPNProtocols = function convertALPNProtocols(protocols, out) { // If protocols is Array - translate it into buffer if (Array.isArray(protocols)) { out.ALPNProtocols = convertProtocols(protocols); - } else if (isUint8Array(protocols)) { + } else if (isArrayBufferView(protocols)) { // Copy new buffer not to be modified by user. out.ALPNProtocols = Buffer.from(protocols); } diff --git a/test/parallel/test-tls-basic-validations.js b/test/parallel/test-tls-basic-validations.js index f2cf82b859..d0082edb46 100644 --- a/test/parallel/test-tls-basic-validations.js +++ b/test/parallel/test-tls-basic-validations.js @@ -94,8 +94,11 @@ common.expectsError( } { - const buffer = new Uint8Array(Buffer.from('abcd')); - const out = {}; - tls.convertALPNProtocols(buffer, out); - assert(out.ALPNProtocols.equals(Buffer.from('abcd'))); + const arrayBufferViewStr = 'abcd'; + const inputBuffer = Buffer.from(arrayBufferViewStr.repeat(8), 'utf8'); + for (const expectView of common.getArrayBufferViews(inputBuffer)) { + const out = {}; + tls.convertALPNProtocols(expectView, out); + assert(out.ALPNProtocols.equals(Buffer.from(expectView))); + } } |