зеркало из https://github.com/mozilla/gecko-dev.git
104610 r=bienvenu sr=sspitzer Make sure that mSubFolders array does not have duplicates.
This commit is contained in:
Родитель
3d14e64e96
Коммит
72ddbbca6d
|
@ -309,6 +309,16 @@ NS_IMETHODIMP nsImapMailFolder::AddSubfolderWithPath(nsAutoString *name, nsIFile
|
|||
if (uriStr == nsnull)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
//will make sure mSubFolders does not have duplicates because of bogus msf files.
|
||||
|
||||
nsCOMPtr <nsIMsgFolder> msgFolder;
|
||||
rv = GetChildWithURI(uriStr, PR_FALSE/*deep*/, PR_FALSE /*case Insensitive*/, getter_AddRefs(msgFolder));
|
||||
if (NS_SUCCEEDED(rv) && msgFolder)
|
||||
{
|
||||
nsMemory::Free(uriStr);
|
||||
return NS_MSG_FOLDER_EXISTS;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIRDFResource> res;
|
||||
rv = rdf->GetResource(uriStr, getter_AddRefs(res));
|
||||
if (NS_FAILED(rv))
|
||||
|
|
|
@ -267,6 +267,11 @@ NS_IMETHODIMP nsMsgLocalMailFolder::AddSubfolder(nsAutoString *name,
|
|||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
uri.Append(escapedName.get());
|
||||
|
||||
nsCOMPtr <nsIMsgFolder> msgFolder;
|
||||
rv = GetChildWithURI(uri.get(), PR_FALSE/*deep*/, PR_TRUE /*case Insensitive*/, getter_AddRefs(msgFolder));
|
||||
if (NS_SUCCEEDED(rv) && msgFolder)
|
||||
return NS_MSG_FOLDER_EXISTS;
|
||||
|
||||
nsCOMPtr<nsIRDFResource> res;
|
||||
rv = rdf->GetResource(uri.get(), getter_AddRefs(res));
|
||||
if (NS_FAILED(rv))
|
||||
|
@ -434,8 +439,7 @@ nsMsgLocalMailFolder::GetSubFolders(nsIEnumerator* *result)
|
|||
if (!path.IsDirectory())
|
||||
AddDirectorySeparator(path);
|
||||
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
mInitialized = PR_TRUE; // need to set this flag here to avoid infinite recursion
|
||||
// we have to treat the root folder specially, because it's name
|
||||
// doesn't end with .sbd
|
||||
PRInt32 newFlags = MSG_FOLDER_FLAG_MAIL;
|
||||
|
@ -481,12 +485,8 @@ nsMsgLocalMailFolder::GetSubFolders(nsIEnumerator* *result)
|
|||
rv = localMailServer->SetFlagsOnDefaultMailboxes();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
}
|
||||
UpdateSummaryTotals(PR_FALSE);
|
||||
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
mInitialized = PR_TRUE; // XXX do this on failure too?
|
||||
}
|
||||
rv = mSubFolders->Enumerate(result);
|
||||
return rv;
|
||||
|
|
Загрузка…
Ссылка в новой задаче