mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-15 06:15:43 +00:00
Bug 1072176 - Clean up misplaced assertions in public functions. r=waldo
--HG-- rename : js/src/jit-test/tests/sharedbuf/bug1068458-toolong.js => js/src/jit-test/tests/sharedbuf/toolong.js
This commit is contained in:
parent
293f52a08f
commit
0a5f96352b
@ -1,14 +0,0 @@
|
||||
// This used to assert, now it will throw because the limit
|
||||
// (in bytes) on a SharedArrayBuffer is INT32_MAX.
|
||||
|
||||
if (!this.SharedUint16Array)
|
||||
quit();
|
||||
|
||||
var thrown = false;
|
||||
try {
|
||||
new SharedUint16Array(2147483647);
|
||||
}
|
||||
catch (e) {
|
||||
thrown = true;
|
||||
}
|
||||
assertEq(thrown, true);
|
22
js/src/jit-test/tests/sharedbuf/toolong.js
Normal file
22
js/src/jit-test/tests/sharedbuf/toolong.js
Normal file
@ -0,0 +1,22 @@
|
||||
// Various cases that used to assert, but will now throw (as they should).
|
||||
|
||||
if (!this.SharedUint16Array)
|
||||
quit();
|
||||
|
||||
var thrown = false;
|
||||
try {
|
||||
new SharedUint16Array(2147483647); // Bug 1068458
|
||||
}
|
||||
catch (e) {
|
||||
thrown = true;
|
||||
}
|
||||
assertEq(thrown, true);
|
||||
|
||||
var thrown = false;
|
||||
try {
|
||||
new SharedUint16Array(0xdeadbeef); // Bug 1072176
|
||||
}
|
||||
catch (e) {
|
||||
thrown = true;
|
||||
}
|
||||
assertEq(thrown, true);
|
@ -145,6 +145,8 @@ class SharedTypedArrayObjectTemplate : public SharedTypedArrayObject
|
||||
static SharedTypedArrayObject *
|
||||
makeTypedInstance(JSContext *cx, uint32_t len, AllocKind allocKind)
|
||||
{
|
||||
JS_ASSERT(len <= MAX_LENGTH / sizeof(NativeType));
|
||||
|
||||
// Multiplication is safe due to preconditions for makeInstance().
|
||||
if (len * sizeof(NativeType) >= SharedTypedArrayObject::SINGLETON_TYPE_BYTE_LENGTH) {
|
||||
return &NewBuiltinClassInstance(cx, instanceClass(), allocKind,
|
||||
@ -173,8 +175,8 @@ class SharedTypedArrayObjectTemplate : public SharedTypedArrayObject
|
||||
HandleObject proto)
|
||||
{
|
||||
JS_ASSERT(buffer);
|
||||
JS_ASSERT(len <= MAX_LENGTH / sizeof(NativeType));
|
||||
JS_ASSERT(byteOffset <= MAX_BYTEOFFSET);
|
||||
JS_ASSERT(len <= MAX_LENGTH / sizeof(NativeType));
|
||||
|
||||
gc::AllocKind allocKind = GetGCObjectKind(instanceClass());
|
||||
|
||||
@ -304,18 +306,6 @@ class SharedTypedArrayObjectTemplate : public SharedTypedArrayObject
|
||||
return fromBuffer(cx, dataObj, byteOffset, length);
|
||||
}
|
||||
|
||||
static bool
|
||||
createArrayBuffer(JSContext *cx, uint32_t nelements, MutableHandle<SharedArrayBufferObject *> buffer)
|
||||
{
|
||||
if (nelements > MAX_LENGTH / sizeof(NativeType)) {
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr,
|
||||
JSMSG_NEED_DIET, "shared typed array");
|
||||
return false;
|
||||
}
|
||||
buffer.set(SharedArrayBufferObject::New(cx, nelements * sizeof(NativeType)));
|
||||
return !!buffer;
|
||||
}
|
||||
|
||||
template<Value ValueGetter(SharedTypedArrayObject *tarr)>
|
||||
static bool
|
||||
GetterImpl(JSContext *cx, CallArgs args)
|
||||
@ -412,6 +402,11 @@ class SharedTypedArrayObjectTemplate : public SharedTypedArrayObject
|
||||
|
||||
static Value getIndexValue(JSObject *tarray, uint32_t index);
|
||||
|
||||
static bool fun_subarray(JSContext *cx, unsigned argc, Value *vp);
|
||||
static bool fun_copyWithin(JSContext *cx, unsigned argc, Value *vp);
|
||||
static bool fun_set(JSContext *cx, unsigned argc, Value *vp);
|
||||
|
||||
public:
|
||||
static JSObject *
|
||||
fromBufferWithProto(JSContext *cx, HandleObject bufobj, uint32_t byteOffset, uint32_t length,
|
||||
HandleObject proto)
|
||||
@ -421,8 +416,6 @@ class SharedTypedArrayObjectTemplate : public SharedTypedArrayObject
|
||||
return nullptr; // must be SharedArrayBuffer
|
||||
}
|
||||
|
||||
JS_ASSERT(IsSharedArrayBuffer(bufobj) || bufobj->is<ProxyObject>());
|
||||
|
||||
if (bufobj->is<ProxyObject>()) {
|
||||
// Complicated, see TypedArrayObject.cpp for code. For now, punt.
|
||||
JS_ReportError(cx, "Permission denied to access object");
|
||||
@ -437,7 +430,6 @@ class SharedTypedArrayObjectTemplate : public SharedTypedArrayObject
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
JS_ASSERT(byteOffset <= buffer->byteLength());
|
||||
uint32_t bytesAvailable = buffer->byteLength() - byteOffset;
|
||||
|
||||
if (length == LENGTH_NOT_PROVIDED) {
|
||||
@ -449,23 +441,16 @@ class SharedTypedArrayObjectTemplate : public SharedTypedArrayObject
|
||||
}
|
||||
|
||||
if (length > MAX_LENGTH / sizeof(NativeType) || length * sizeof(NativeType) > bytesAvailable) {
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_SHARED_TYPED_ARRAY_BAD_ARGS);
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_BAD_ARRAY_LENGTH);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return makeInstance(cx, buffer, byteOffset, length, proto);
|
||||
}
|
||||
|
||||
static bool fun_subarray(JSContext *cx, unsigned argc, Value *vp);
|
||||
static bool fun_copyWithin(JSContext *cx, unsigned argc, Value *vp);
|
||||
static bool fun_set(JSContext *cx, unsigned argc, Value *vp);
|
||||
|
||||
public:
|
||||
static JSObject *
|
||||
fromBuffer(JSContext *cx, HandleObject bufobj, uint32_t byteOffset, uint32_t length)
|
||||
{
|
||||
JS_ASSERT(byteOffset <= MAX_BYTEOFFSET);
|
||||
JS_ASSERT(length <= MAX_LENGTH || length == LENGTH_NOT_PROVIDED);
|
||||
RootedObject proto(cx, nullptr);
|
||||
return fromBufferWithProto(cx, bufobj, byteOffset, length, proto);
|
||||
}
|
||||
@ -473,10 +458,13 @@ class SharedTypedArrayObjectTemplate : public SharedTypedArrayObject
|
||||
static JSObject *
|
||||
fromLength(JSContext *cx, uint32_t nelements)
|
||||
{
|
||||
JS_ASSERT(nelements <= MAX_LENGTH);
|
||||
Rooted<SharedArrayBufferObject *> buffer(cx);
|
||||
// Invariant established by createArrayBuffer(): nelements * sizeof(NativeType) <= MAX_LENGTH.
|
||||
if (!createArrayBuffer(cx, nelements, &buffer))
|
||||
if (nelements > MAX_LENGTH / sizeof(NativeType)) {
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_BAD_ARRAY_LENGTH);
|
||||
return nullptr;
|
||||
}
|
||||
Rooted<SharedArrayBufferObject *> buffer(
|
||||
cx, SharedArrayBufferObject::New(cx, nelements * sizeof(NativeType)));
|
||||
if (!buffer)
|
||||
return nullptr;
|
||||
return makeInstance(cx, buffer, 0, nelements);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user