Bug 1917341: nsJar cleanup of ADDREFs/RELEASEs r=necko-reviewers,valentin

Differential Revision: https://phabricator.services.mozilla.com/D221365
This commit is contained in:
Randell Jesup 2024-09-09 12:44:10 +00:00
Родитель 11a5534f19
Коммит 09374ed3d6
2 изменённых файлов: 14 добавлений и 15 удалений

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

@ -248,9 +248,9 @@ nsJAR::GetEntry(const nsACString& aEntryName, nsIZipEntry** result) {
nsZipItem* zipItem = mZip->GetItem(PromiseFlatCString(aEntryName).get());
NS_ENSURE_TRUE(zipItem, NS_ERROR_FILE_NOT_FOUND);
nsJARItem* jarItem = new nsJARItem(zipItem);
RefPtr<nsJARItem> jarItem = new nsJARItem(zipItem);
NS_ADDREF(*result = jarItem);
*result = jarItem.forget().take();
return NS_OK;
}
@ -280,9 +280,10 @@ nsJAR::FindEntries(const nsACString& aPattern,
aPattern.IsEmpty() ? nullptr : PromiseFlatCString(aPattern).get(), &find);
NS_ENSURE_SUCCESS(rv, rv);
nsIUTF8StringEnumerator* zipEnum = new nsJAREnumerator(find);
RefPtr<nsIUTF8StringEnumerator> zipEnum = new nsJAREnumerator(find);
NS_ADDREF(*result = zipEnum);
// Callers use getter_addrefs
*result = zipEnum.forget().take();
return NS_OK;
}
@ -303,9 +304,7 @@ nsJAR::GetInputStream(const nsACString& aEntryName, nsIInputStream** result) {
item = mZip->GetItem(entry.get());
if (!item) return NS_ERROR_FILE_NOT_FOUND;
}
nsJARInputStream* jis = new nsJARInputStream();
// addref now so we can call InitFile/InitDirectory()
NS_ADDREF(*result = jis);
RefPtr<nsJARInputStream> jis = new nsJARInputStream();
nsresult rv = NS_OK;
if (!item || item->IsDirectory()) {
@ -314,8 +313,9 @@ nsJAR::GetInputStream(const nsACString& aEntryName, nsIInputStream** result) {
RefPtr<nsZipHandle> fd = mZip->GetFD();
rv = jis->InitFile(fd, mZip->GetData(item), item);
}
if (NS_FAILED(rv)) {
NS_RELEASE(*result);
if (NS_SUCCEEDED(rv)) {
// Callers use getter_addrefs
*result = jis.forget().take();
}
return rv;
}

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

@ -70,24 +70,23 @@ nsJARProtocolHandler::GetScheme(nsACString& result) {
NS_IMETHODIMP
nsJARProtocolHandler::NewChannel(nsIURI* uri, nsILoadInfo* aLoadInfo,
nsIChannel** result) {
nsJARChannel* chan = new nsJARChannel();
if (!chan) return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(chan);
RefPtr<nsJARChannel> chan = new nsJARChannel();
if (!chan) {
return NS_ERROR_OUT_OF_MEMORY;
}
nsresult rv = chan->Init(uri);
if (NS_FAILED(rv)) {
NS_RELEASE(chan);
return rv;
}
// set the loadInfo on the new channel
rv = chan->SetLoadInfo(aLoadInfo);
if (NS_FAILED(rv)) {
NS_RELEASE(chan);
return rv;
}
*result = chan;
*result = chan.forget().take();
return NS_OK;
}