From dcbd59ff2b95e96ecb13376e590a86f696371202 Mon Sep 17 00:00:00 2001 From: "jst%mozilla.jstenback.com" Date: Fri, 21 May 2004 21:19:13 +0000 Subject: [PATCH] Fixing part of bug 241157. Making it valid for an nsIVariant to hold a interface pointer pointing to null. r=ben@bengoodger.com, sr=darin@meer.net. git-svn-id: svn://10.0.0.236/trunk@156733 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/xpcom/ds/nsVariant.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/mozilla/xpcom/ds/nsVariant.cpp b/mozilla/xpcom/ds/nsVariant.cpp index d10150bf0e2..09a4cda5de1 100644 --- a/mozilla/xpcom/ds/nsVariant.cpp +++ b/mozilla/xpcom/ds/nsVariant.cpp @@ -1168,8 +1168,13 @@ nsVariant::ConvertToISupports(const nsDiscriminatedUnion& data, { case nsIDataType::VTYPE_INTERFACE: case nsIDataType::VTYPE_INTERFACE_IS: - return data.u.iface.mInterfaceValue-> - QueryInterface(NS_GET_IID(nsISupports), (void**)_retval); + if (data.u.iface.mInterfaceValue) { + return data.u.iface.mInterfaceValue-> + QueryInterface(NS_GET_IID(nsISupports), (void**)_retval); + } else { + *_retval = nsnull; + return NS_OK; + } default: return NS_ERROR_CANNOT_CONVERT_DATA; } @@ -1196,7 +1201,13 @@ nsVariant::ConvertToInterface(const nsDiscriminatedUnion& data, nsIID * *iid, *iid = (nsIID*) nsMemory::Clone(piid, sizeof(nsIID)); if(!*iid) return NS_ERROR_OUT_OF_MEMORY; - return data.u.iface.mInterfaceValue->QueryInterface(*piid, iface); + + if (data.u.iface.mInterfaceValue) { + return data.u.iface.mInterfaceValue->QueryInterface(*piid, iface); + } + + *iface = nsnull; + return NS_OK; } /* static */ nsresult @@ -1498,9 +1509,7 @@ nsVariant::SetFromInterface(nsDiscriminatedUnion* data, const nsIID& iid, nsISupports *aValue) { DATA_SETTER_PROLOGUE(data); - if(!aValue) - return NS_ERROR_NULL_POINTER; - NS_ADDREF(aValue); + NS_IF_ADDREF(aValue); data->u.iface.mInterfaceValue = aValue; data->u.iface.mInterfaceID = iid; DATA_SETTER_EPILOGUE(data, VTYPE_INTERFACE_IS);