From 2a88b29b3de4e716e038dece3dbacfbf0635a9b5 Mon Sep 17 00:00:00 2001 From: "sspitzer%netscape.com" Date: Tue, 5 Feb 2002 02:00:25 +0000 Subject: [PATCH] fix for #122481, crash when creating (and then unsubscribing) from bogus newsgroups, like news://news.mozilla.org/foo/bar. also some code cleanup. r/sr=bienvenu. thanks to hwaara for the initial patch. git-svn-id: svn://10.0.0.236/trunk@113664 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/mailnews/news/src/nsNewsFolder.cpp | 46 +++++++++++----------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/mozilla/mailnews/news/src/nsNewsFolder.cpp b/mozilla/mailnews/news/src/nsNewsFolder.cpp index 8f76248e35a..6aa927af765 100644 --- a/mozilla/mailnews/news/src/nsNewsFolder.cpp +++ b/mozilla/mailnews/news/src/nsNewsFolder.cpp @@ -102,7 +102,6 @@ static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID); static NS_DEFINE_CID(kCNewsDB, NS_NEWSDB_CID); static NS_DEFINE_CID(kMsgMailSessionCID, NS_MSGMAILSESSION_CID); static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID); -static NS_DEFINE_CID(kStandardUrlCID, NS_STANDARDURL_CID); // ###tw This really ought to be the most // efficient file reading size for the current @@ -386,30 +385,31 @@ nsresult nsMsgNewsFolder::GetDatabase(nsIMsgWindow *aMsgWindow) rv = GetPath(getter_AddRefs(pathSpec)); if (NS_FAILED(rv)) return rv; - nsresult folderOpen = NS_OK; - nsCOMPtr newsDBFactory; - - rv = nsComponentManager::CreateInstance(kCNewsDB, nsnull, NS_GET_IID(nsIMsgDatabase), getter_AddRefs(newsDBFactory)); - if (NS_SUCCEEDED(rv) && newsDBFactory) { - folderOpen = newsDBFactory->OpenFolderDB(this, PR_TRUE, PR_FALSE, getter_AddRefs(mDatabase)); - } + nsCOMPtr newsDBFactory = do_CreateInstance(kCNewsDB, &rv); + NS_ENSURE_SUCCESS(rv,rv); + + nsresult folderOpen = newsDBFactory->OpenFolderDB(this, PR_TRUE, PR_FALSE, getter_AddRefs(mDatabase)); if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE) folderOpen = newsDBFactory->OpenFolderDB(this, PR_TRUE, PR_TRUE, getter_AddRefs(mDatabase)); - if (mDatabase) { - if(mAddListener) - rv = mDatabase->AddListener(this); + if (NS_FAILED(folderOpen)) + return folderOpen; + + if(mAddListener) + rv = mDatabase->AddListener(this); - nsCOMPtr db(do_QueryInterface(mDatabase, &rv)); - if (NS_FAILED(rv)) return rv; + nsCOMPtr db = do_QueryInterface(mDatabase, &rv); + if (NS_FAILED(rv)) + return rv; - rv = db->SetReadSet(mReadSet); - if (NS_FAILED(rv)) return rv; - rv = UpdateSummaryTotals(PR_TRUE); - } - if (NS_FAILED(rv)) return rv; - + rv = db->SetReadSet(mReadSet); + if (NS_FAILED(rv)) + return rv; + + rv = UpdateSummaryTotals(PR_TRUE); + if (NS_FAILED(rv)) + return rv; } return NS_OK; } @@ -769,9 +769,7 @@ nsMsgNewsFolder::GetDBFolderInfoAndDB(nsIDBFolderInfo **folderInfo, nsIMsgDataba return NS_ERROR_NULL_POINTER; openErr = GetDatabase(nsnull); - - *db = mDatabase; - NS_IF_ADDREF(*db); + NS_IF_ADDREF(*db = mDatabase); if (NS_SUCCEEDED(openErr)&& *db) openErr = (*db)->GetDBFolderInfo(folderInfo); return openErr; @@ -1241,8 +1239,8 @@ nsresult nsMsgNewsFolder::CreateNewsgroupUrlForSignon(const char *inUriStr, cons PRInt32 port = 0; nsXPIDLCString spec; - nsCOMPtr url; - nsComponentManager::CreateInstance(kStandardUrlCID, nsnull, NS_GET_IID(nsIURL), (void **) getter_AddRefs(url)); + nsCOMPtr url = do_CreateInstance(NS_STANDARDURL_CONTRACTID, &rv); + NS_ENSURE_SUCCESS(rv,rv); rv = url->SetSpec(inUriStr); if (NS_FAILED(rv)) return rv;