зеркало из https://github.com/mozilla/pjs.git
fix for 50663, memory leak in ab directory handling, sr=me, checking in for jarrod.k.gray
This commit is contained in:
Родитель
5ccf4938a9
Коммит
587ed9f545
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче