fix for 50663, memory leak in ab directory handling, sr=me, checking in for jarrod.k.gray

This commit is contained in:
bienvenu%netscape.com 2000-11-15 21:46:16 +00:00
Родитель adf71d76b1
Коммит 78b954f839
5 изменённых файлов: 20 добавлений и 91 удалений

Просмотреть файл

@ -673,17 +673,15 @@ NS_IMETHODIMP nsAbDirectory::DeleteDirectory(nsIAbDirectory *directory)
{ //it's a mailing list
nsresult rv = NS_OK;
char *uri;
rv = directory->GetDirUri(&uri);
nsXPIDLCString uri;
rv = directory->GetDirUri(getter_Copies(uri));
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIAddrDatabase> database;
NS_WITH_SERVICE(nsIAddressBook, addresBook, kAddrBookCID, &rv);
if (NS_SUCCEEDED(rv))
{
rv = addresBook->GetAbDatabaseFromURI(uri, getter_AddRefs(database));
nsMemory::Free(uri);
rv = addresBook->GetAbDatabaseFromURI((const char *)uri, getter_AddRefs(database));
if (NS_SUCCEEDED(rv))
rv = database->DeleteMailList(directory, PR_TRUE);
@ -728,15 +726,14 @@ NS_IMETHODIMP nsAbDirectory::HasDirectory(nsIAbDirectory *dir, PRBool *hasDir)
dir->GetIsMailList(&bIsMailingList);
if (bIsMailingList)
{
char *uri;
rv = dir->GetDirUri(&uri);
nsXPIDLCString uri;
rv = dir->GetDirUri(getter_Copies(uri));
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIAddrDatabase> database;
NS_WITH_SERVICE(nsIAddressBook, addresBook, kAddrBookCID, &rv);
if (NS_SUCCEEDED(rv))
{
rv = addresBook->GetAbDatabaseFromURI(uri, getter_AddRefs(database));
nsMemory::Free(uri);
rv = addresBook->GetAbDatabaseFromURI((const char *)uri, getter_AddRefs(database));
}
if(NS_SUCCEEDED(rv) && database)
{
@ -792,9 +789,9 @@ NS_IMETHODIMP nsAbDirectory::GetDirUri(char **uri)
if (uri)
{
if (mURI)
*uri = PL_strdup(mURI);
*uri = nsCRT::strdup(mURI);
else
*uri = PL_strdup("");
*uri = nsCRT::strdup("");
return NS_OK;
}
else

Просмотреть файл

@ -551,12 +551,11 @@ nsresult nsAbDirectoryDataSource::createDirectoryNameNode(nsIAbDirectory *direct
nsresult nsAbDirectoryDataSource::createDirectoryUriNode(nsIAbDirectory *directory,
nsIRDFNode **target)
{
char *uri;
nsresult rv = directory->GetDirUri(&uri);
nsXPIDLCString uri;
nsresult rv = directory->GetDirUri(getter_Copies(uri));
if (NS_FAILED(rv)) return rv;
nsString nameString; nameString.AssignWithConversion(uri);
createNode(nameString, target);
nsMemory::Free(uri);
return NS_OK;
}

Просмотреть файл

@ -2330,7 +2330,7 @@ static nsresult OpenAddressBook(const char * dbUri, nsIAddrDatabase** aDatabase,
}
nsresult nsMsgCompose::GetABDirectories(char * dirUri, nsISupportsArray* directoriesArray, PRBool searchSubDirectory)
nsresult nsMsgCompose::GetABDirectories(const char * dirUri, nsISupportsArray* directoriesArray, PRBool searchSubDirectory)
{
static PRBool collectedAddressbookFound;
if (nsCRT::strcmp(dirUri, kDirectoryRoot) == 0)
@ -2369,20 +2369,20 @@ nsresult nsMsgCompose::GetABDirectories(char * dirUri, nsISupportsArray* directo
if (NS_SUCCEEDED(directory->GetIsMailList(&bIsMailList)) && bIsMailList)
continue;
char* uri;
rv = directory->GetDirUri(&uri);
nsXPIDLCString uri;
rv = directory->GetDirUri(getter_Copies(uri));
if (NS_FAILED(rv))
return rv;
PRInt32 pos;
if (nsCRT::strcmp(uri, kPersonalAddressbookUri) == 0)
if (nsCRT::strcmp((const char *)uri, kPersonalAddressbookUri) == 0)
pos = 0;
else
{
PRUint32 count = 0;
directoriesArray->Count(&count);
if (PL_strcmp(uri, kCollectedAddressbookUri) == 0)
if (PL_strcmp((const char *)uri, kCollectedAddressbookUri) == 0)
{
collectedAddressbookFound = PR_TRUE;
pos = count;
@ -2397,9 +2397,7 @@ nsresult nsMsgCompose::GetABDirectories(char * dirUri, nsISupportsArray* directo
}
directoriesArray->InsertElementAt(directory, pos);
rv = GetABDirectories(uri, directoriesArray, PR_TRUE);
PR_Free(uri);
rv = GetABDirectories((const char *)uri, directoriesArray, PR_TRUE);
}
}
} while (NS_SUCCEEDED(subDirectories->Next()));
@ -2587,12 +2585,12 @@ nsresult nsMsgCompose::CheckAndPopulateRecipients(PRBool populateMailList, PRBoo
if (NS_FAILED(rv))
return rv;
char* uri;
rv = abDirectory->GetDirUri(&uri);
nsXPIDLCString uri;
rv = abDirectory->GetDirUri(getter_Copies(uri));
if (NS_FAILED(rv))
return rv;
rv = OpenAddressBook(uri, getter_AddRefs(abDataBase), getter_AddRefs(abDirectory));
rv = OpenAddressBook((const char *)uri, getter_AddRefs(abDataBase), getter_AddRefs(abDirectory));
if (NS_FAILED(rv) || !abDataBase || !abDirectory)
continue;

Просмотреть файл

@ -97,7 +97,7 @@ class nsMsgCompose : public nsIMsgCompose
nsresult _SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity *identity);
nsresult CreateMessage(const PRUnichar * originalMsgURI, MSG_ComposeType type, MSG_ComposeFormat format, nsIMsgCompFields* compFields);
void CleanUpRecipients(nsString& recipients);
nsresult GetABDirectories(char * dirUri, nsISupportsArray* directoriesArray, PRBool searchSubDirectory);
nsresult GetABDirectories(const char * dirUri, nsISupportsArray* directoriesArray, PRBool searchSubDirectory);
nsresult BuildMailListArray(nsIAddrDatabase* database, nsIAbDirectory* parentDir, nsISupportsArray* array);
nsresult GetMailListAddresses(nsString& name, nsISupportsArray* mailListArray, nsISupportsArray** addresses);
nsresult TagConvertible(nsIDOMNode *node, PRInt32 *_retval);

Просмотреть файл

@ -830,72 +830,7 @@ nsIAddrDatabase *GetAddressBook( const PRUnichar *name, PRBool makeNew)
}
}
return( pDatabase);
/*
NS_WITH_SERVICE(nsIAbDirectory, directoryFactory, kAbDirectoryCID, &rv);
if (NS_FAILED(rv)) {
IMPORT_LOG0( "*** Unable to get nsIAbDirectory service.\n");
return( nsnull);
}
nsString sName = name;
char * cName = sName.ToNewCString();
int nLen = nsCRT::strlen( cName) + 10;
char * nName = new char[nLen];
char * pUri = nsnull;
nsCOMPtr<nsIEnumerator> nodes;
directoryFactory->GetChildNodes( getter_AddRefs( nodes));
if (nodes) {
nsISupports * pSupports = nsnull;
int cnt = 1;
rv = nodes->First();
while(NS_SUCCEEDED( rv)) {
pSupports = nsnull;
rv = nodes->CurrentItem( &pSupports);
if (NS_SUCCEEDED( rv))
rv = nodes->Next();
if (pSupports) {
nsCOMPtr<nsISupports> iFace( dont_AddRef( pSupports));
nsCOMPtr<nsIAbDirectory> dir( do_QueryInterface( pSupports));
if (dir) {
char *dirName = nsnull;
dir->GetDirName( &dirName);
if (dirName && !nsCRT::strcasecmp( dirName, cName)) {
if (!makeNew) {
delete [] nName;
nsCRT::free( cName);
dir->GetDirUri( &pUri);
return( pUri);
}
rv = nodes->First();
nsCRT::free( cName);
cName = sName.ToNewCString();
PR_snprintf( nName, nLen, "%s-%d", cName, cnt);
cnt++;
nsCRT::free( cName);
cName = nsCRT::strdup( nName);
}
}
}
}
}
delete [] nName;
nsCOMPtr<nsIAbDirectory> newDir;
rv = directoryFactory->CreateNewDirectory( cName, nsnull, getter_AddRefs( newDir));
nsCRT::free( cName);
if (NS_SUCCEEDED( rv) && newDir) {
newDir->GetDirUri( &pUri);
}
return( pUri);
*/
}
void nsImportGenericAddressBooks::ReportError( PRUnichar *pName, nsString *pStream)