From 7f44b8d3554cfc272def16086183fd07b8af7a59 Mon Sep 17 00:00:00 2001 From: "dougt%netscape.com" Date: Wed, 15 Sep 1999 20:40:50 +0000 Subject: [PATCH] Fixed memory leak when calling ToString on version. Fixed 13501. --- xpinstall/src/nsInstall.cpp | 52 ++++++++++++++++-------------- xpinstall/src/nsInstallVersion.cpp | 5 ++- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/xpinstall/src/nsInstall.cpp b/xpinstall/src/nsInstall.cpp index e3fdbba1a139..4852c8061c79 100644 --- a/xpinstall/src/nsInstall.cpp +++ b/xpinstall/src/nsInstall.cpp @@ -443,20 +443,12 @@ nsInstall::AddSubcomponent(const nsString& aRegName, { nsInstallFile* ie; nsString qualifiedRegName; - nsString qualifiedVersion; - nsString tempTargetName; + nsString qualifiedVersion = aVersion; + nsString tempTargetName = aTargetName; PRInt32 errcode = nsInstall::SUCCESS; - if( aTargetName.Equals("") ) - { - tempTargetName = aJarSource; - } - else - { - tempTargetName = aTargetName; - } - + if(aJarSource.Equals("") || aFolder.Equals("") ) { *aReturn = SaveError( nsInstall::INVALID_ARGUMENTS ); @@ -470,19 +462,13 @@ nsInstall::AddSubcomponent(const nsString& aRegName, *aReturn = SaveError( result ); return NS_OK; } - - qualifiedVersion = aVersion; + + if( aTargetName.Equals("") ) + tempTargetName = aJarSource; + if (qualifiedVersion == "") - { - // assume package version for overriden forms that don't take version info - *aReturn = mVersionInfo->ToString(qualifiedVersion); + qualifiedVersion.SetString("0.0.0.0"); - if (NS_FAILED(*aReturn)) - { - SaveError( nsInstall::UNEXPECTED_ERROR ); - return NS_OK; - } - } if ( aRegName.Equals("") ) { @@ -552,8 +538,17 @@ nsInstall::AddSubcomponent(const nsString& aRegName, const nsString& aTargetName, PRInt32* aReturn) { + nsString version; + *aReturn = mVersionInfo->ToString(version); + + if (NS_FAILED(*aReturn)) + { + SaveError( nsInstall::UNEXPECTED_ERROR ); + return NS_OK; + } + return AddSubcomponent(aRegName, - "", + version, aJarSource, aFolder, aTargetName, @@ -570,9 +565,18 @@ nsInstall::AddSubcomponent(const nsString& aJarSource, *aReturn = SaveError( nsInstall::PACKAGE_FOLDER_NOT_SET ); return NS_OK; } + + nsString version; + *aReturn = mVersionInfo->ToString(version); + + if (NS_FAILED(*aReturn)) + { + SaveError( nsInstall::UNEXPECTED_ERROR ); + return NS_OK; + } return AddSubcomponent("", - "", + version, aJarSource, mPackageFolder, "", diff --git a/xpinstall/src/nsInstallVersion.cpp b/xpinstall/src/nsInstallVersion.cpp index fc84e60a766c..9855983e65ca 100644 --- a/xpinstall/src/nsInstallVersion.cpp +++ b/xpinstall/src/nsInstallVersion.cpp @@ -28,6 +28,7 @@ #include "nsIScriptGlobalObject.h" #include "prprf.h" +#include "prmem.h" static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); @@ -268,7 +269,9 @@ nsInstallVersion::ToString(nsString& aReturn) char *result=NULL; result = PR_sprintf_append(result, "%d.%d.%d.%d", major, minor, release, build); - aReturn = result; + aReturn.SetString(result); + + PR_FREEIF(result); return NS_OK; }