From 7c6d1fa65fde20c277cfa08632d4176505968058 Mon Sep 17 00:00:00 2001 From: "timeless%mozdev.org" Date: Thu, 16 Jun 2005 01:39:19 +0000 Subject: [PATCH] Bug 235643 all _CreatePrintSettings leak on failure patch by baafie@planet.nl r=timeless sr=bz a=asa --- gfx/src/mac/nsPrintOptionsX.cpp | 13 +++++++++---- gfx/src/windows/nsPrintOptionsWin.cpp | 7 +++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/gfx/src/mac/nsPrintOptionsX.cpp b/gfx/src/mac/nsPrintOptionsX.cpp index c5ca8492d587..ec207dcecf9d 100644 --- a/gfx/src/mac/nsPrintOptionsX.cpp +++ b/gfx/src/mac/nsPrintOptionsX.cpp @@ -67,13 +67,18 @@ nsPrintOptionsX::~nsPrintOptionsX() nsresult nsPrintOptionsX::_CreatePrintSettings(nsIPrintSettings **_retval) { nsresult rv; + *_retval = nsnull; + nsPrintSettingsX* printSettings = new nsPrintSettingsX; // does not initially ref count - if (!printSettings) - return NS_ERROR_OUT_OF_MEMORY; + NS_ENSURE_TRUE(printSettings, NS_ERROR_OUT_OF_MEMORY); + + NS_ADDREF(*_retval = printSettings); // ref count + rv = printSettings->Init(); if (NS_FAILED(rv)) - return rv; - return printSettings->QueryInterface(NS_GET_IID(nsIPrintSettings), (void**)_retval); // ref counts + NS_RELEASE(*_retval); + + return rv; } /** --------------------------------------------------- diff --git a/gfx/src/windows/nsPrintOptionsWin.cpp b/gfx/src/windows/nsPrintOptionsWin.cpp index 7b16bb637413..da111f9fb8d2 100644 --- a/gfx/src/windows/nsPrintOptionsWin.cpp +++ b/gfx/src/windows/nsPrintOptionsWin.cpp @@ -62,9 +62,12 @@ nsPrintOptionsWin::~nsPrintOptionsWin() /* nsIPrintSettings CreatePrintSettings (); */ nsresult nsPrintOptionsWin::_CreatePrintSettings(nsIPrintSettings **_retval) { + *_retval = nsnull; nsPrintSettingsWin* printSettings = new nsPrintSettingsWin(); // does not initially ref count - NS_ASSERTION(printSettings, "Can't be NULL!"); + NS_ENSURE_TRUE(printSettings, NS_ERROR_OUT_OF_MEMORY); - return printSettings->QueryInterface(NS_GET_IID(nsIPrintSettings), (void**)_retval); // ref counts + NS_ADDREF(*_retval = printSettings); // ref count + + return NS_OK; }