diff options
author | Steve Block <steveblock@google.com> | 2010-04-27 16:31:00 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-05-11 14:42:12 +0100 |
commit | dcc8cf2e65d1aa555cce12431a16547e66b469ee (patch) | |
tree | 92a8d65cd5383bca9749f5327fb5e440563926e6 /WebCore/html/canvas/WebGLArray.cpp | |
parent | ccac38a6b48843126402088a309597e682f40fe6 (diff) | |
download | external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.zip external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.gz external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.bz2 |
Merge webkit.org at r58033 : Initial merge by git
Change-Id: If006c38561af287c50cd578d251629b51e4d8cd1
Diffstat (limited to 'WebCore/html/canvas/WebGLArray.cpp')
-rw-r--r-- | WebCore/html/canvas/WebGLArray.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/WebCore/html/canvas/WebGLArray.cpp b/WebCore/html/canvas/WebGLArray.cpp index c5a712d..038aea4 100644 --- a/WebCore/html/canvas/WebGLArray.cpp +++ b/WebCore/html/canvas/WebGLArray.cpp @@ -46,13 +46,33 @@ WebGLArray::~WebGLArray() void WebGLArray::setImpl(WebGLArray* array, unsigned byteOffset, ExceptionCode& ec) { - if (byteOffset + array->byteLength() > byteLength()) { + if (byteOffset > byteLength() || + byteOffset + array->byteLength() > byteLength() || + byteOffset + array->byteLength() < byteOffset) { + // Out of range offset or overflow ec = INDEX_SIZE_ERR; return; } char* base = static_cast<char*>(baseAddress()); - memcpy(base + byteOffset, array->baseAddress(), array->byteLength()); + memmove(base + byteOffset, array->baseAddress(), array->byteLength()); +} + +void WebGLArray::calculateOffsetAndLength(int start, int end, unsigned arraySize, + unsigned* offset, unsigned* length) +{ + if (start < 0) + start += arraySize; + if (start < 0) + start = 0; + if (end < 0) + end += arraySize; + if (end < 0) + end = 0; + if (end < start) + end = start; + *offset = static_cast<unsigned>(start); + *length = static_cast<unsigned>(end - start); } } |