From 3c54b457a8dff9b206872d9205969fd7b3e501d3 Mon Sep 17 00:00:00 2001 From: "shanjian%netscape.com" Date: Thu, 21 Feb 2002 23:16:51 +0000 Subject: [PATCH] #122081 Universalchardet leaks memory The fix for the nsCharSetProber class declaration, plus fix for nsUniversalDetector methods, which may cause another leak when the object is reused after Reset(). Patch proposed by Takayuki Tamura r=shanjian, sr/a=brendan --- extensions/universalchardet/src/nsCharSetProber.h | 1 + extensions/universalchardet/src/nsUniversalDetector.cpp | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/extensions/universalchardet/src/nsCharSetProber.h b/extensions/universalchardet/src/nsCharSetProber.h index 67b143b69a57..fe18e9b0bf2a 100644 --- a/extensions/universalchardet/src/nsCharSetProber.h +++ b/extensions/universalchardet/src/nsCharSetProber.h @@ -50,6 +50,7 @@ typedef enum { class nsCharSetProber { public: + virtual ~nsCharSetProber() {}; virtual const char* GetCharSetName() = 0; virtual nsProbingState HandleData(const char* aBuf, PRUint32 aLen) = 0; virtual nsProbingState GetState(void) = 0; diff --git a/extensions/universalchardet/src/nsUniversalDetector.cpp b/extensions/universalchardet/src/nsUniversalDetector.cpp index 50b2921ccbd1..7535c21bff6b 100644 --- a/extensions/universalchardet/src/nsUniversalDetector.cpp +++ b/extensions/universalchardet/src/nsUniversalDetector.cpp @@ -89,7 +89,6 @@ nsUniversalDetector::Reset() mDone = PR_FALSE; mBestGuess = -1; //illegal value as signal mInTag = PR_FALSE; - mEscCharSetProber = nsnull; mStart = PR_TRUE; mDetectedCharset = nsnull; @@ -148,8 +147,10 @@ void nsUniversalDetector::HandleData(const char* aBuf, PRUint32 aLen) mInputState = eHighbyte; //kill mEscCharSetProber if it is active - if (mEscCharSetProber) + if (mEscCharSetProber) { delete mEscCharSetProber; + mEscCharSetProber = nsnull; + } //start multibyte and singlebyte charset prober if (nsnull == mCharSetProbers[0])