Kaydet (Commit) 31b35ed6 authored tarafından Tsahi Glik's avatar Tsahi Glik Kaydeden (comit) Thorsten Behrens

Detect copyArea trying to operate on overlapping memory.

Equality test also needs to check if disjunct BitmapDevice instances
might not actually share the same memory buffer.

Change-Id: I09a93cb092a0039353be211ed053e991e7fe66f0
üst c32c11fb
......@@ -680,7 +680,7 @@ namespace
destIterRange(begin,
acc,
rDstRect),
rSrcBitmap.get() == this );
isSharedBuffer(rSrcBitmap) );
damaged( rDstRect );
}
......@@ -903,7 +903,7 @@ namespace
Masks::clipmask_polarity,
FastMask >::type(acc),
rDstRect),
rSrcBitmap.get() == this);
isSharedBuffer(rSrcBitmap));
damaged( rDstRect );
}
......@@ -1147,6 +1147,11 @@ PaletteMemorySharedVector BitmapDevice::getPalette() const
return mpImpl->mpPalette;
}
bool BitmapDevice::isSharedBuffer( const BitmapDeviceSharedPtr& rOther ) const
{
return rOther.get()->getBuffer().get() == getBuffer().get();
}
void BitmapDevice::clear( Color fillColor )
{
clear_i( fillColor, mpImpl->maBounds );
......@@ -1507,7 +1512,7 @@ void BitmapDevice::drawMaskedColor( Color aSrcColor,
assertImagePoint(aDestPoint,mpImpl->maBounds);
assertImageRange(aSrcRange,aSrcBounds);
if( rAlphaMask.get() == this )
if( isSharedBuffer(rAlphaMask) )
{
// src == dest, copy rAlphaMask beforehand
// ---------------------------------------------------
......@@ -1560,7 +1565,7 @@ void BitmapDevice::drawMaskedColor( Color aSrcColor,
if( isCompatibleClipMask( rClip ) )
{
if( rAlphaMask.get() == this )
if( isSharedBuffer(rAlphaMask) )
{
// src == dest, copy rAlphaMask beforehand
// ---------------------------------------------------
......
......@@ -140,6 +140,9 @@ public:
*/
PaletteMemorySharedVector getPalette() const;
/// Check if this and the other BitmapDevice share a buffer
bool isSharedBuffer( const BitmapDeviceSharedPtr& rOther ) const;
/** Clear whole device with given color
This method works like a fill with the given color value,
......
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