From f234564c68d9a71f91a3ec35313334affb345d03 Mon Sep 17 00:00:00 2001 From: "sfraser%netscape.com" Date: Thu, 5 Oct 2000 04:06:53 +0000 Subject: [PATCH] Fix for bug 55140, r=brade, sr=ftang. Fix a stale pointer bug in unicode font mapping routines, by not using a global (which got stale), but using an inline getter instead. git-svn-id: svn://10.0.0.236/branches/Netscape_20000922_BRANCH@80421 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/gfx/src/mac/nsUnicodeFontMappingMac.cpp | 13 +++++++------ mozilla/gfx/src/mac/nsUnicodeFontMappingMac.h | 1 - mozilla/gfx/src/mac/nsUnicodeMappingUtil.cpp | 9 ++++++--- mozilla/gfx/src/mac/nsUnicodeMappingUtil.h | 4 ++-- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.cpp b/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.cpp index 923030bfe15..2f8af31da7a 100644 --- a/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.cpp +++ b/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.cpp @@ -125,7 +125,6 @@ static PRBool FontEnumCallback(const nsString& aFamily, PRBool aGeneric, void *a } //-------------------------------------------------------------------------- nsUnicodeMappingUtil *nsUnicodeFontMappingMac::gUtil = nsnull; -nsUnicodeFontMappingCache *nsUnicodeFontMappingMac::gCache = nsnull; //-------------------------------------------------------------------------- @@ -308,19 +307,21 @@ nsUnicodeFontMappingMac* nsUnicodeFontMappingMac::GetCachedInstance( { if(! gUtil) gUtil = nsUnicodeMappingUtil::GetSingleton(); - if(! gCache) - gCache = gUtil->GetFontMappingCache(); - + + nsUnicodeFontMappingCache* fontMappingCache = gUtil->GetFontMappingCache(); + NS_ASSERTION(fontMappingCache, "Should have a fontMappingCache here"); + if (!fontMappingCache) return nsnull; + nsUnicodeFontMappingMac* obj = nsnull; nsAutoString key(aFont->name); key.AppendWithConversion(":"); key.Append(aLangGroup); key.AppendWithConversion(":"); key.Append(aLANG); - if(! gCache->Get ( key, &obj )){ + if(! fontMappingCache->Get ( key, &obj )){ obj = new nsUnicodeFontMappingMac(aFont, aDeviceContext, aLangGroup, aLANG); if( obj ) - gCache->Set ( key, obj); + fontMappingCache->Set ( key, obj); } NS_PRECONDITION(nsnull != obj, "out of memory"); return obj; diff --git a/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.h b/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.h index 0b42b5ede38..1beb2043ada 100644 --- a/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.h +++ b/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.h @@ -57,7 +57,6 @@ private: PRInt8 mPrivBlockToScript [kUnicodeBlockVarScriptMax] ; short mScriptFallbackFontIDs [smPseudoTotalScripts] ; static nsUnicodeMappingUtil* gUtil; - static nsUnicodeFontMappingCache* gCache; }; #endif /* nsUnicodeFontMappingMac_h__ */ diff --git a/mozilla/gfx/src/mac/nsUnicodeMappingUtil.cpp b/mozilla/gfx/src/mac/nsUnicodeMappingUtil.cpp index d9879a190de..5df2d330ba7 100644 --- a/mozilla/gfx/src/mac/nsUnicodeMappingUtil.cpp +++ b/mozilla/gfx/src/mac/nsUnicodeMappingUtil.cpp @@ -59,7 +59,7 @@ void nsUnicodeMappingUtil::Init() InitFromPref(); InitScriptFontMapping(); InitBlockToScriptMapping(); // this must be called after InitScriptEnabled() - gCache = new nsUnicodeFontMappingCache(); + mCache = new nsUnicodeFontMappingCache(); ++gUnicodeMappingUtilCount; } void nsUnicodeMappingUtil::CleanUp() @@ -70,8 +70,11 @@ void nsUnicodeMappingUtil::CleanUp() nsString::Recycle(mGenericFontMapping[i][j]); } } - if(gCache) - delete gCache; + if (mCache) + { + delete mCache; + mCache = nsnull; + } } //-------------------------------------------------------------------------- diff --git a/mozilla/gfx/src/mac/nsUnicodeMappingUtil.h b/mozilla/gfx/src/mac/nsUnicodeMappingUtil.h index c68ee464c0d..002004047de 100644 --- a/mozilla/gfx/src/mac/nsUnicodeMappingUtil.h +++ b/mozilla/gfx/src/mac/nsUnicodeMappingUtil.h @@ -69,7 +69,7 @@ public: else return mGenericFontMapping[aScript][aType]; } - inline nsUnicodeFontMappingCache* GetFontMappingCache() { return gCache; }; + inline nsUnicodeFontMappingCache* GetFontMappingCache() { return mCache; }; ScriptCode MapLangGroupToScriptCode(const char* aLangGroup); static nsUnicodeMappingUtil* GetSingleton(); @@ -86,7 +86,7 @@ private: PRUint32 mScriptEnabled; short mScriptFontMapping[smPseudoTotalScripts]; PRInt8 mBlockToScriptMapping[kUnicodeBlockSize]; - nsUnicodeFontMappingCache* gCache; + nsUnicodeFontMappingCache* mCache; static nsUnicodeMappingUtil* gSingleton;