Jacek Caban : mshtml: Properly handle OOM errors in nsio.c (coverity).
Alexandre Julliard
julliard at winehq.org
Fri Oct 19 13:33:53 CDT 2012
Module: wine
Branch: master
Commit: 421368b8758e1f700743a8c5fafb650f332bf28f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=421368b8758e1f700743a8c5fafb650f332bf28f
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Oct 19 11:58:01 2012 +0200
mshtml: Properly handle OOM errors in nsio.c (coverity).
---
dlls/mshtml/nsio.c | 39 ++++++++++++++++++++++++---------------
1 files changed, 24 insertions(+), 15 deletions(-)
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 6e63244..7fc2a3a 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -1005,11 +1005,17 @@ static nsresult async_open(nsChannel *This, HTMLOuterWindow *window, BOOL is_doc
hres = create_pending_window(window, bscallback);
if(SUCCEEDED(hres))
async_start_doc_binding(window, window->pending_window);
- IUnknown_Release((IUnknown*)bscallback);
+ IBindStatusCallback_Release(&bscallback->bsc.IBindStatusCallback_iface);
if(FAILED(hres))
return NS_ERROR_UNEXPECTED;
}else {
- start_binding_task_t *task = heap_alloc(sizeof(start_binding_task_t));
+ start_binding_task_t *task;
+
+ task = heap_alloc(sizeof(start_binding_task_t));
+ if(!task) {
+ IBindStatusCallback_Release(&bscallback->bsc.IBindStatusCallback_iface);
+ return NS_ERROR_OUT_OF_MEMORY;
+ }
task->window = window->base.inner_window;
task->bscallback = bscallback;
@@ -2846,9 +2852,13 @@ static const nsIStandardURLVtbl nsStandardURLVtbl = {
static nsresult create_nsuri(IUri *iuri, HTMLOuterWindow *window, NSContainer *container, nsWineURI **_retval)
{
- nsWineURI *ret = heap_alloc_zero(sizeof(nsWineURI));
+ nsWineURI *ret;
HRESULT hres;
+ ret = heap_alloc_zero(sizeof(nsWineURI));
+ if(!ret)
+ return NS_ERROR_OUT_OF_MEMORY;
+
ret->nsIFileURL_iface.lpVtbl = &nsFileURLVtbl;
ret->nsIStandardURL_iface.lpVtbl = &nsStandardURLVtbl;
ret->ref = 1;
@@ -3121,17 +3131,6 @@ static const nsIProtocolHandlerVtbl nsProtocolHandlerVtbl = {
nsProtocolHandler_AllowPort
};
-static nsIProtocolHandler *create_protocol_handler(nsIProtocolHandler *nshandler)
-{
- nsProtocolHandler *ret = heap_alloc(sizeof(nsProtocolHandler));
-
- ret->nsIProtocolHandler_iface.lpVtbl = &nsProtocolHandlerVtbl;
- ret->ref = 1;
- ret->nshandler = nshandler;
-
- return &ret->nsIProtocolHandler_iface;
-}
-
static nsresult NSAPI nsIOService_QueryInterface(nsIIOService*,nsIIDRef,void**);
static nsrefcnt NSAPI nsIOService_AddRef(nsIIOService *iface)
@@ -3149,6 +3148,7 @@ static nsresult NSAPI nsIOService_GetProtocolHandler(nsIIOService *iface, const
{
nsIExternalProtocolHandler *nsexthandler;
nsIProtocolHandler *nshandler;
+ nsProtocolHandler *ret;
nsresult nsres;
TRACE("(%s %p)\n", debugstr_a(aScheme), _retval);
@@ -3167,7 +3167,16 @@ static nsresult NSAPI nsIOService_GetProtocolHandler(nsIIOService *iface, const
}
nsIExternalProtocolHandler_Release(nsexthandler);
- *_retval = create_protocol_handler(nshandler);
+
+ ret = heap_alloc(sizeof(nsProtocolHandler));
+ if(!ret)
+ return NS_ERROR_OUT_OF_MEMORY;
+
+ ret->nsIProtocolHandler_iface.lpVtbl = &nsProtocolHandlerVtbl;
+ ret->ref = 1;
+ ret->nshandler = nshandler;
+ *_retval = &ret->nsIProtocolHandler_iface;
+
TRACE("return %p\n", *_retval);
return NS_OK;
}
More information about the wine-cvs
mailing list