Kaydet (Commit) dacab845 authored tarafından Tor Lillqvist's avatar Tor Lillqvist

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
üst 634f6479
......@@ -70,6 +70,8 @@ public:
// checks if the menuhandle was created by VCL
bool IsKnownMenuHandle( HMENU hMenu );
bool mbResourcesAlreadyFreed;
public:
HINSTANCE mhInst; // default instance handle
HINSTANCE mhPrevInst; // previous instance handle
......
......@@ -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 )
......
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