Commit 61a7f8a5 authored by Andreas Haas's avatar Andreas Haas Committed by Commit Bot

[canvas] Add overflow check in the ImageData constructor

We saw this issue in another CL.

R=haraken@chromium.org

Change-Id: Ib1bd74d8df9de318430970d7c36e0b18f42e37bb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1936489Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Andreas Haas <ahaas@chromium.org>
Cr-Commit-Position: refs/heads/master@{#719130}
parent ff3de9d7
...@@ -882,8 +882,9 @@ ImageData::ImageData(const IntSize& size, ...@@ -882,8 +882,9 @@ ImageData::ImageData(const IntSize& size,
static_cast<const DOMUint8ClampedArray*>(data)); static_cast<const DOMUint8ClampedArray*>(data));
DCHECK(data_); DCHECK(data_);
data_union_.SetUint8ClampedArray(data_); data_union_.SetUint8ClampedArray(data_);
SECURITY_CHECK(static_cast<size_t>(size.Width() * size.Height() * 4) <= SECURITY_CHECK(
data_->lengthAsSizeT()); (base::CheckedNumeric<size_t>(size.Width()) * size.Height() * 4)
.ValueOrDie() <= data_->lengthAsSizeT());
break; break;
case kUint16ArrayStorageFormat: case kUint16ArrayStorageFormat:
...@@ -892,8 +893,9 @@ ImageData::ImageData(const IntSize& size, ...@@ -892,8 +893,9 @@ ImageData::ImageData(const IntSize& size,
const_cast<DOMUint16Array*>(static_cast<const DOMUint16Array*>(data)); const_cast<DOMUint16Array*>(static_cast<const DOMUint16Array*>(data));
DCHECK(data_u16_); DCHECK(data_u16_);
data_union_.SetUint16Array(data_u16_); data_union_.SetUint16Array(data_u16_);
SECURITY_CHECK(static_cast<size_t>(size.Width() * size.Height() * 4) <= SECURITY_CHECK(
data_u16_->lengthAsSizeT()); (base::CheckedNumeric<size_t>(size.Width()) * size.Height() * 4)
.ValueOrDie() <= data_u16_->lengthAsSizeT());
break; break;
case kFloat32ArrayStorageFormat: case kFloat32ArrayStorageFormat:
...@@ -902,8 +904,9 @@ ImageData::ImageData(const IntSize& size, ...@@ -902,8 +904,9 @@ ImageData::ImageData(const IntSize& size,
static_cast<const DOMFloat32Array*>(data)); static_cast<const DOMFloat32Array*>(data));
DCHECK(data_f32_); DCHECK(data_f32_);
data_union_.SetFloat32Array(data_f32_); data_union_.SetFloat32Array(data_f32_);
SECURITY_CHECK(static_cast<size_t>(size.Width() * size.Height() * 4) <= SECURITY_CHECK(
data_f32_->lengthAsSizeT()); (base::CheckedNumeric<size_t>(size.Width()) * size.Height() * 4)
.ValueOrDie() <= data_f32_->lengthAsSizeT());
break; break;
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment