Commit f9ae413a authored by John Rummell's avatar John Rummell Committed by Commit Bot

Check if memory can be mapped before creating MojoCdmBuffer

It looks like SharedBufferHandle can fail to map into the current
processes address space, so check that it succeeds before creating
a MojoCdmBuffer. If it fails, return NULL.

Bug: 1063823
Test: Encrypted videos play (using Shaka Player)
Change-Id: I02a2f9f1daea7cd0188f77ee051ac9fe012d8119
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2118890
Commit-Queue: John Rummell <jrummell@chromium.org>
Reviewed-by: default avatarXiaohan Wang <xhwang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#753400}
parent 79f8dc4c
......@@ -38,9 +38,14 @@ class MojoCdmBuffer : public cdm::Buffer {
// cdm::Buffer interface limits capacity to uint32.
DCHECK_LE(capacity, std::numeric_limits<uint32_t>::max());
return new MojoCdmBuffer(std::move(buffer),
base::checked_cast<uint32_t>(capacity),
std::move(mojo_shared_buffer_done_cb));
auto mapping = buffer->Map(capacity);
if (!mapping)
return nullptr;
return new MojoCdmBuffer(
std::move(buffer), base::checked_cast<uint32_t>(capacity),
std::move(mapping), std::move(mojo_shared_buffer_done_cb));
}
// cdm::Buffer implementation.
......@@ -75,13 +80,13 @@ class MojoCdmBuffer : public cdm::Buffer {
private:
MojoCdmBuffer(mojo::ScopedSharedBufferHandle buffer,
uint32_t capacity,
mojo::ScopedSharedBufferMapping mapping,
MojoSharedBufferVideoFrame::MojoSharedBufferDoneCB
mojo_shared_buffer_done_cb)
: buffer_(std::move(buffer)),
mojo_shared_buffer_done_cb_(std::move(mojo_shared_buffer_done_cb)),
capacity_(capacity),
size_(0) {
mapping_ = buffer_->Map(capacity_);
mapping_(std::move(mapping)),
capacity_(capacity) {
DCHECK(mapping_);
}
......@@ -95,8 +100,8 @@ class MojoCdmBuffer : public cdm::Buffer {
mojo_shared_buffer_done_cb_;
mojo::ScopedSharedBufferMapping mapping_;
uint32_t capacity_;
uint32_t size_;
const uint32_t capacity_;
uint32_t size_ = 0;
DISALLOW_COPY_AND_ASSIGN(MojoCdmBuffer);
};
......
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