Bug 1739454 - Don't allow write-mapping of SourceSurfaceSharedData after Finalize. r=aosmond

Differential Revision: https://phabricator.services.mozilla.com/D131584
This commit is contained in:
Lee Salzman 2021-11-19 18:46:47 +00:00
Родитель 2fa8b582b1
Коммит c032e821e7
4 изменённых файлов: 19 добавлений и 11 удалений

Просмотреть файл

@ -92,10 +92,15 @@ bool SourceSurfaceSharedDataWrapper::EnsureMapped(size_t aLength) {
return true;
}
bool SourceSurfaceSharedDataWrapper::Map(MapType,
bool SourceSurfaceSharedDataWrapper::Map(MapType aMapType,
MappedSurface* aMappedSurface) {
uint8_t* dataPtr;
if (aMapType != MapType::READ) {
// The data may be write-protected
return false;
}
if (mHandleLock) {
MutexAutoLock lock(*mHandleLock);
dataPtr = GetData();

Просмотреть файл

@ -65,7 +65,7 @@ class SourceSurfaceSharedDataWrapper final : public DataSourceSurface {
bool OnHeap() const override { return false; }
bool Map(MapType, MappedSurface* aMappedSurface) final;
bool Map(MapType aMapType, MappedSurface* aMappedSurface) final;
void Unmap() final;
@ -174,8 +174,12 @@ class SourceSurfaceSharedData : public DataSourceSurface {
* the same data pointer by retaining the old shared buffer until
* the last mapping is freed via Unmap.
*/
bool Map(MapType, MappedSurface* aMappedSurface) final {
bool Map(MapType aMapType, MappedSurface* aMappedSurface) final {
MutexAutoLock lock(mMutex);
if (mFinalized && aMapType != MapType::READ) {
// Once finalized the data may be write-protected
return false;
}
++mMapCount;
aMappedSurface->mData = GetDataInternal();
aMappedSurface->mStride = mStride;

Просмотреть файл

@ -65,8 +65,8 @@ wr::WrExternalImage RenderBufferTextureHost::Lock(
gfxCriticalNote << "DataSourceSurface is null";
return InvalidToWrExternalImage();
}
if (NS_WARN_IF(!mSurface->Map(gfx::DataSourceSurface::MapType::READ_WRITE,
&mMap))) {
if (NS_WARN_IF(
!mSurface->Map(gfx::DataSourceSurface::MapType::READ, &mMap))) {
mSurface = nullptr;
gfxCriticalNote << "Failed to map Surface";
return InvalidToWrExternalImage();
@ -89,11 +89,10 @@ wr::WrExternalImage RenderBufferTextureHost::Lock(
return InvalidToWrExternalImage();
}
if (NS_WARN_IF(
!mYSurface->Map(gfx::DataSourceSurface::MapType::READ_WRITE,
&mYMap) ||
!mCbSurface->Map(gfx::DataSourceSurface::MapType::READ_WRITE,
!mYSurface->Map(gfx::DataSourceSurface::MapType::READ, &mYMap) ||
!mCbSurface->Map(gfx::DataSourceSurface::MapType::READ,
&mCbMap) ||
!mCrSurface->Map(gfx::DataSourceSurface::MapType::READ_WRITE,
!mCrSurface->Map(gfx::DataSourceSurface::MapType::READ,
&mCrMap))) {
mYSurface = mCbSurface = mCrSurface = nullptr;
gfxCriticalNote << "Failed to map YCbCr Surface";

Просмотреть файл

@ -27,8 +27,8 @@ RenderSharedSurfaceTextureHost::~RenderSharedSurfaceTextureHost() {
wr::WrExternalImage RenderSharedSurfaceTextureHost::Lock(
uint8_t aChannelIndex, gl::GLContext* aGL, wr::ImageRendering aRendering) {
if (!mLocked) {
if (NS_WARN_IF(!mSurface->Map(gfx::DataSourceSurface::MapType::READ_WRITE,
&mMap))) {
if (NS_WARN_IF(
!mSurface->Map(gfx::DataSourceSurface::MapType::READ, &mMap))) {
return InvalidToWrExternalImage();
}
mLocked = true;