From 68fafb4cbe7f6fba782630bd59557a8814e400fb Mon Sep 17 00:00:00 2001
From: Daniel Ehrenberg <littledan@chromium.org>
Date: Tue, 21 Mar 2017 11:31:33 +0100
Subject: [PATCH] Tests for throwing a TypeError in the TypedArray constructor
 on a detached buffer

Detached buffer causes an exception
- If it's already detached going into the constructor
- If the byteOffset coercion causes it to be detached

Tests are valid in ES2017
---
 .../TypedArrays/buffer-arg-detached.js        | 20 +++++++++++++++++++
 .../byteoffset-arg-detachbuffer.js            | 20 +++++++++++++++++++
 2 files changed, 40 insertions(+)
 create mode 100644 test/built-ins/TypedArrays/buffer-arg-detached.js
 create mode 100644 test/built-ins/TypedArrays/byteoffset-arg-detachbuffer.js

diff --git a/test/built-ins/TypedArrays/buffer-arg-detached.js b/test/built-ins/TypedArrays/buffer-arg-detached.js
new file mode 100644
index 0000000000..9e112d0bca
--- /dev/null
+++ b/test/built-ins/TypedArrays/buffer-arg-detached.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-typedarray-buffer-byteoffset-length
+description: If TypedArray() is passed a detached buffer, throw
+info: >
+  22.2.4.5 TypedArray ( buffer [ , byteOffset [ , length ] ] )
+
+  ...
+  8. If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
+  ...
+includes: [testTypedArray.js, detachArrayBuffer.js]
+---*/
+
+testWithTypedArrayConstructors(function(TA) {
+  var offset = TA.BYTES_PER_ELEMENT;
+  var buffer = new ArrayBuffer(3 * offset);
+  $DETACHBUFFER(buffer);
+  assert.throws(TypeError, () => new TA(buffer));
+});
diff --git a/test/built-ins/TypedArrays/byteoffset-arg-detachbuffer.js b/test/built-ins/TypedArrays/byteoffset-arg-detachbuffer.js
new file mode 100644
index 0000000000..5f3406ce1c
--- /dev/null
+++ b/test/built-ins/TypedArrays/byteoffset-arg-detachbuffer.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-typedarray-buffer-byteoffset-length
+description: If TypedArray() is passed a detached buffer, throw
+info: >
+  22.2.4.5 TypedArray ( buffer [ , byteOffset [ , length ] ] )
+
+  ...
+  8. If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
+  ...
+includes: [testTypedArray.js, detachArrayBuffer.js]
+---*/
+
+testWithTypedArrayConstructors(function(TA) {
+  var offset = TA.BYTES_PER_ELEMENT;
+  var buffer = new ArrayBuffer(3 * offset);
+  var byteOffset = { valueOf() { $DETACHBUFFER(buffer); return 1; } };
+  assert.throws(TypeError, () => new TA(buffer, byteOffset));
+});
-- 
GitLab