summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeni von Cheni <benjaminlchen@gmail.com>2018-10-01 22:52:30 -0400
committerDaniel Bevenius <daniel.bevenius@gmail.com>2018-10-08 08:29:33 +0200
commitf5ab9d1765dab78516b16da4ca9ef670c7022328 (patch)
treee1644bd5fa78c5c6e8168529af162d764f487643
parent1c75ec2c7eea6e1c667edd3268f0970dc1547e68 (diff)
downloadandroid-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.md35
-rw-r--r--lib/tls.js4
-rw-r--r--test/parallel/test-tls-basic-validations.js11
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)));
+ }
}