diff --git a/libcef/browser/osr/host_display_client_osr.cc b/libcef/browser/osr/host_display_client_osr.cc index ab354184464d4e6846eb9bd81dca4774ac50f2c9..2f2409d121eb7a10b4e3a1ba2a96d953050e3253 100644 --- a/libcef/browser/osr/host_display_client_osr.cc +++ b/libcef/browser/osr/host_display_client_osr.cc @@ -76,14 +76,24 @@ void CefLayeredWindowUpdaterOSR::OnAllocatedSharedMemory( base::UnsafeSharedMemoryRegion region) { // Make sure |pixel_size| is sane. size_t expected_bytes; - bool size_result = viz::ResourceSizes::MaybeSizeInBytes( - pixel_size, viz::ResourceFormat::RGBA_8888, &expected_bytes); - if (!size_result) + if (!viz::ResourceSizes::MaybeSizeInBytes( + pixel_size, viz::SinglePlaneFormat::kRGBA_8888, &expected_bytes)) { + DLOG(ERROR) << "OnAllocatedSharedMemory with size that overflows"; return; + } + + auto mapping = region.Map(); + if (!mapping.IsValid()) { + DLOG(ERROR) << "Shared memory mapping failed."; + return; + } + if (mapping.size() < expected_bytes) { + DLOG(ERROR) << "Shared memory size was less than expected."; + return; + } pixel_size_ = pixel_size; - shared_memory_ = region.Map(); - DCHECK(shared_memory_.IsValid()); + shared_memory_ = std::move(mapping); } void CefLayeredWindowUpdaterOSR::Draw(const gfx::Rect& damage_rect, diff --git a/libcef/browser/osr/video_consumer_osr.cc b/libcef/browser/osr/video_consumer_osr.cc index d243049a67b78f50a9425473e2bc9b725e33b396..dccc6315b44fcdf2e9c682e0e241a44fc6439f56 100644 --- a/libcef/browser/osr/video_consumer_osr.cc +++ b/libcef/browser/osr/video_consumer_osr.cc @@ -87,6 +87,11 @@ void CefVideoConsumerOSR::OnFrameCaptured( callbacks) { ScopedVideoFrameDone scoped_done(std::move(callbacks)); + if (info->pixel_format != media::PIXEL_FORMAT_ARGB) { + DLOG(ERROR) << "Unsupported pixel format " << info->pixel_format; + return; + } + CHECK(data->is_read_only_shmem_region()); base::ReadOnlySharedMemoryRegion& shmem_region = data->get_read_only_shmem_region();