diff options
author | Tor Lillqvist <tml@collabora.com> | 2014-06-03 23:36:18 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2014-06-04 07:05:23 +0300 |
commit | dacab84536f61f79a5422e1d8d394019ec62f3ec (patch) | |
tree | bdc8c7f52f83a2610a501bbfe8b8aead014f5f50 /vcl/win | |
parent | 634f647912c07d366e31bfc168fa1294f1613cd6 (diff) |
Avoid accessing freed memory and freeing already freed resources
Seen in smoketest in a 4.2-based branch, but might perhaps happen in master
too. Should not hurt in any case to be more careful. ImplFreeSalGDI() is
called both from SalAbort() and from DestroySalInstance().
Change-Id: Ifac37e8ecfb432848bd3451dbda8634c59a06fba
Diffstat (limited to 'vcl/win')
-rw-r--r-- | vcl/win/source/gdi/salgdi.cxx | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/vcl/win/source/gdi/salgdi.cxx b/vcl/win/source/gdi/salgdi.cxx index 31af87670d59..50c0f8efe83e 100644 --- a/vcl/win/source/gdi/salgdi.cxx +++ b/vcl/win/source/gdi/salgdi.cxx @@ -113,6 +113,8 @@ void ImplInitSalGDI() { SalData* pSalData = GetSalData(); + pSalData->mbResourcesAlreadyFreed = false; + // init stock brushes pSalData->maStockPenColorAry[0] = PALETTERGB( 0, 0, 0 ); pSalData->maStockPenColorAry[1] = PALETTERGB( 0xFF, 0xFF, 0xFF ); @@ -290,6 +292,9 @@ void ImplFreeSalGDI() { SalData* pSalData = GetSalData(); + if (pSalData->mbResourcesAlreadyFreed) + return; + // destroy stock objects int i; for ( i = 0; i < pSalData->mnStockPenCount; i++ ) @@ -356,6 +361,8 @@ void ImplFreeSalGDI() // delete temporary font list ImplReleaseTempFonts( *pSalData ); + + pSalData->mbResourcesAlreadyFreed = true; } static int ImplIsPaletteEntry( BYTE nRed, BYTE nGreen, BYTE nBlue ) |