X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/runtime/JSDataView.cpp diff --git a/runtime/JSDataView.cpp b/runtime/JSDataView.cpp index d2e231a..513d4c6 100644 --- a/runtime/JSDataView.cpp +++ b/runtime/JSDataView.cpp @@ -34,7 +34,7 @@ namespace JSC { const ClassInfo JSDataView::s_info = { - "DataView", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(JSDataView)}; + "DataView", &Base::s_info, 0, CREATE_METHOD_TABLE(JSDataView)}; JSDataView::JSDataView(VM& vm, ConstructionContext& context, ArrayBuffer* buffer) : Base(vm, context) @@ -47,10 +47,13 @@ JSDataView* JSDataView::create( unsigned byteOffset, unsigned byteLength) { RefPtr buffer = passedBuffer; - if (!ArrayBufferView::verifySubRange(buffer, byteOffset, byteLength)) { - throwVMError( - exec, createRangeError(exec, "Byte offset and length out of range of buffer")); - return 0; + if (!ArrayBufferView::verifySubRangeLength(buffer, byteOffset, byteLength, sizeof(uint8_t))) { + throwVMError(exec, createRangeError(exec, ASCIILiteral("Length out of range of buffer"))); + return nullptr; + } + if (!ArrayBufferView::verifyByteOffsetAlignment(byteOffset, sizeof(uint8_t))) { + exec->vm().throwException(exec, createRangeError(exec, ASCIILiteral("Byte offset is not aligned"))); + return nullptr; } VM& vm = exec->vm(); ConstructionContext context(