Fix typedarray validation in Atomics read_modify_write (#4879)

This patch fixes #4875.

JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik robert.fancsik@h-lab.eu
This commit is contained in:
Robert Fancsik 2021-12-15 10:33:21 +01:00 committed by GitHub
parent d37ff33dbe
commit dbba83fe40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 16 deletions

View File

@ -51,9 +51,9 @@ ecma_validate_shared_integer_typedarray (ecma_value_t typedarray, /**< typedArra
bool waitable) /**< waitable argument */
{
/* 2. */
if (!ecma_is_value_object (typedarray))
if (!ecma_is_typedarray (typedarray))
{
return ecma_raise_type_error (ECMA_ERR_ARGUMENT_THIS_NOT_OBJECT);
return ecma_raise_type_error (ECMA_ERR_ARGUMENT_THIS_NOT_TYPED_ARRAY);
}
/* 3-4. */

View File

@ -0,0 +1,20 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
try {
Atomics.sub({});
assert(false);
} catch (e) {
assert(e instanceof TypeError);
}

View File

@ -2601,13 +2601,11 @@
<test id="built-ins/Atomics/add/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/add/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/add/non-shared-bufferdata.js"><reason></reason></test>
<test id="built-ins/Atomics/add/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/and/bigint/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/and/bigint/non-shared-bufferdata.js"><reason></reason></test>
<test id="built-ins/Atomics/and/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/and/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/and/non-shared-bufferdata.js"><reason></reason></test>
<test id="built-ins/Atomics/and/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/compareExchange/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/compareExchange/bigint/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/compareExchange/bigint/good-views.js"><reason></reason></test>
@ -2625,14 +2623,12 @@
<test id="built-ins/Atomics/exchange/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/exchange/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/exchange/non-shared-bufferdata.js"><reason></reason></test>
<test id="built-ins/Atomics/exchange/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/isLockFree/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/load/bigint/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/load/bigint/non-shared-bufferdata.js"><reason></reason></test>
<test id="built-ins/Atomics/load/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/load/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/load/non-shared-bufferdata.js"><reason></reason></test>
<test id="built-ins/Atomics/load/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/notify/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/notify/bigint/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/notify/bigint/non-bigint64-typedarray-throws.js"><reason></reason></test>
@ -2677,7 +2673,6 @@
<test id="built-ins/Atomics/or/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/or/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/or/non-shared-bufferdata.js"><reason></reason></test>
<test id="built-ins/Atomics/or/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/store/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/store/bigint/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/store/bigint/good-views.js"><reason></reason></test>
@ -2694,7 +2689,6 @@
<test id="built-ins/Atomics/sub/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/sub/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/sub/non-shared-bufferdata.js"><reason></reason></test>
<test id="built-ins/Atomics/sub/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/wait/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/wait/bigint/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/wait/bigint/cannot-suspend-throws.js"><reason></reason></test>
@ -2773,7 +2767,6 @@
<test id="built-ins/Atomics/xor/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/xor/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/xor/non-shared-bufferdata.js"><reason></reason></test>
<test id="built-ins/Atomics/xor/non-views.js"><reason></reason></test>
<!-- ES2017: Shared Memory and Atomics
features: [SharedArrayBuffer]
@ -2782,11 +2775,9 @@
<test id="built-ins/Atomics/add/bigint/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/add/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/add/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/add/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/and/bigint/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/and/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/and/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/and/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/compareExchange/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/compareExchange/bigint/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/compareExchange/bigint/good-views.js"><reason></reason></test>
@ -2796,11 +2787,9 @@
<test id="built-ins/Atomics/exchange/bigint/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/exchange/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/exchange/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/exchange/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/load/bigint/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/load/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/load/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/load/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/notify/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/notify/bigint/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/notify/bigint/notify-all-on-loc.js"><reason></reason></test>
@ -2829,7 +2818,6 @@
<test id="built-ins/Atomics/or/bigint/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/or/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/or/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/or/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/store/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/store/bigint/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/store/bigint/good-views.js"><reason></reason></test>
@ -2839,7 +2827,6 @@
<test id="built-ins/Atomics/sub/bigint/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/sub/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/sub/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/sub/non-views.js"><reason></reason></test>
<test id="built-ins/Atomics/wait/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/wait/bigint/bad-range.js"><reason></reason></test>
<test id="built-ins/Atomics/wait/bigint/cannot-suspend-throws.js"><reason></reason></test>
@ -2944,6 +2931,7 @@
<test id="built-ins/Atomics/waitAsync/bigint/was-woken-before-timeout.js"><reason></reason></test>
<test id="built-ins/Atomics/waitAsync/false-for-timeout-agent.js"><reason></reason></test>
<test id="built-ins/Atomics/waitAsync/false-for-timeout.js"><reason></reason></test>
<test id="built-ins/Atomics/waitAsync/implicit-infinity-for-timeout.js"><reason></reason></test>
<test id="built-ins/Atomics/waitAsync/nan-for-timeout-agent.js"><reason></reason></test>
<test id="built-ins/Atomics/waitAsync/negative-index-throws.js"><reason></reason></test>
<test id="built-ins/Atomics/waitAsync/negative-timeout-agent.js"><reason></reason></test>
@ -2990,7 +2978,6 @@
<test id="built-ins/Atomics/xor/bigint/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/xor/expected-return-value.js"><reason></reason></test>
<test id="built-ins/Atomics/xor/good-views.js"><reason></reason></test>
<test id="built-ins/Atomics/xor/non-views.js"><reason></reason></test>
<test id="built-ins/TypedArrayConstructors/ctors-bigint/buffer-arg/typedarray-backed-by-sharedarraybuffer.js"><reason></reason></test>
<test id="built-ins/TypedArrayConstructors/ctors/buffer-arg/typedarray-backed-by-sharedarraybuffer.js"><reason></reason></test>
<!-- END - ES2017: Shared Memory and Atomics -->