Skip to content

Commit 9d50432

Browse files
authored
crypto: reject resizable backing stores in Web Crypto buffer parameters
Aligns the BigInteger and BufferSource Web IDL converters with the default backing-store validation, rejecting views over resizable ArrayBuffers instead of silently allowing them. Signed-off-by: Filip Skokan <panva.ip@gmail.com> PR-URL: #63925 Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 5402b5e commit 9d50432

2 files changed

Lines changed: 17 additions & 47 deletions

File tree

lib/internal/crypto/webidl.js

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ const {
1111

1212
const {
1313
lazyDOMException,
14-
kEmptyObject,
1514
} = require('internal/util');
1615
const { CryptoKey } = require('internal/crypto/webcrypto');
1716
const {
@@ -133,30 +132,7 @@ const dictAlgorithm = [
133132
converters.Algorithm = createDictionaryConverter(
134133
'Algorithm', dictAlgorithm);
135134

136-
// TODO(panva): Reject resizable backing stores in a semver-major with:
137-
// converters.BigInteger = webidl.Uint8Array;
138-
converters.BigInteger = (V, opts = kEmptyObject) => {
139-
return webidl.Uint8Array(V, {
140-
prefix: opts.prefix,
141-
context: opts.context,
142-
code: opts.code,
143-
allowResizable: true,
144-
allowShared: false,
145-
});
146-
};
147-
148-
// TODO(panva): Reject resizable backing stores in a semver-major by
149-
// removing this altogether.
150-
converters.BufferSource = (V, opts = kEmptyObject) => {
151-
return webidl.BufferSource(V, {
152-
prefix: opts.prefix,
153-
context: opts.context,
154-
code: opts.code,
155-
allowResizable: opts.allowResizable === undefined ?
156-
true : opts.allowResizable,
157-
allowShared: opts.allowShared,
158-
});
159-
};
135+
converters.BigInteger = webidl.Uint8Array;
160136

161137
const dictRsaKeyGenParams = [
162138
{

test/parallel/test-webcrypto-webidl.js

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,13 @@ function assertJsonWebKey(actual, expected) {
178178
const resizable = new ArrayBuffer(8, { maxByteLength: 16 });
179179
const view = new Uint8Array(resizable);
180180

181-
// TODO(panva): Reject resizable backing stores in a semver-major
182-
assert.deepStrictEqual(converters.BigInteger(view), view);
181+
const resizableError = {
182+
name: 'TypeError',
183+
code: 'ERR_INVALID_ARG_TYPE',
184+
message: `${prefix}: ${context} is backed by a resizable ` +
185+
'ArrayBuffer, which is not allowed.',
186+
};
187+
assert.throws(() => converters.BigInteger(view, opts), resizableError);
183188
}
184189
}
185190

@@ -223,32 +228,21 @@ function assertJsonWebKey(actual, expected) {
223228
const view = new Uint8Array(resizable);
224229
const dataView = new DataView(resizable);
225230

226-
// TODO(panva): Reject resizable backing stores in a semver-major by
227-
// removing the crypto/webidl BufferSource override.
228-
assert.deepStrictEqual(converters.BufferSource(resizable), resizable);
229-
assert.deepStrictEqual(converters.BufferSource(view), view);
230-
assert.deepStrictEqual(converters.BufferSource(dataView), dataView);
231231
const resizableError = {
232232
name: 'TypeError',
233233
code: 'ERR_INVALID_ARG_TYPE',
234234
message: `${prefix}: ${context} is backed by a resizable ` +
235235
'ArrayBuffer, which is not allowed.',
236236
};
237-
assert.throws(() => converters.BufferSource(resizable, {
238-
__proto__: null,
239-
...opts,
240-
allowResizable: false,
241-
}), resizableError);
242-
assert.throws(() => converters.BufferSource(view, {
243-
__proto__: null,
244-
...opts,
245-
allowResizable: false,
246-
}), resizableError);
247-
assert.throws(() => converters.BufferSource(dataView, {
248-
__proto__: null,
249-
...opts,
250-
allowResizable: false,
251-
}), resizableError);
237+
assert.throws(
238+
() => converters.BufferSource(resizable, opts),
239+
resizableError);
240+
assert.throws(
241+
() => converters.BufferSource(view, opts),
242+
resizableError);
243+
assert.throws(
244+
() => converters.BufferSource(dataView, opts),
245+
resizableError);
252246
}
253247
}
254248

0 commit comments

Comments
 (0)