diff --git a/widget/src/xpwidgets/nsHTMLFormatConverter.cpp b/widget/src/xpwidgets/nsHTMLFormatConverter.cpp
index 7c4e09c76ef5..feeff818880a 100644
--- a/widget/src/xpwidgets/nsHTMLFormatConverter.cpp
+++ b/widget/src/xpwidgets/nsHTMLFormatConverter.cpp
@@ -21,6 +21,7 @@
*
* Contributor(s):
* Pierre Phaneuf
+ * Mats Palmgren
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -209,6 +210,8 @@ nsHTMLFormatConverter::Convert(const char *aFromDataFlavor, nsISupports *aFromDa
return NS_ERROR_INVALID_ARG;
nsresult rv = NS_OK;
+ *aToData = nsnull;
+ *aDataToLen = 0;
if ( !nsCRT::strcmp(aFromDataFlavor, kHTMLMime) ) {
nsCAutoString toFlavor ( aToDataFlavor );
@@ -253,8 +256,6 @@ nsHTMLFormatConverter::Convert(const char *aFromDataFlavor, nsISupports *aFromDa
}
} // else if AOL mail
else {
- *aToData = nsnull;
- *aDataToLen = 0;
rv = NS_ERROR_FAILURE;
}
} // if we got html mime
diff --git a/widget/src/xpwidgets/nsTransferable.cpp b/widget/src/xpwidgets/nsTransferable.cpp
index 20f3103d4212..b2f07b0990f3 100644
--- a/widget/src/xpwidgets/nsTransferable.cpp
+++ b/widget/src/xpwidgets/nsTransferable.cpp
@@ -22,6 +22,7 @@
* Contributor(s):
* Mike Pinkerton (pinkerton@netscape.com)
* Dainis Jonitis (Dainis_Jonitis@swh-t.lv)
+ * Mats Palmgren
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -315,19 +316,24 @@ nsTransferable::GetTransferData(const char *aFlavor, nsISupports **aData, PRUint
for (i = 0; i < mDataArray.Length(); ++i ) {
DataStruct& data = mDataArray.ElementAt(i);
if ( data.GetFlavor().Equals(aFlavor) ) {
- data.GetData(aData, aDataLen);
- if (*aDataLen == kFlavorHasDataProvider) {
+ nsCOMPtr dataBytes;
+ PRUint32 len;
+ data.GetData(getter_AddRefs(dataBytes), &len);
+ if (len == kFlavorHasDataProvider && dataBytes) {
// do we have a data provider?
- nsCOMPtr dataProvider = do_QueryInterface(*aData);
+ nsCOMPtr dataProvider = do_QueryInterface(dataBytes);
if (dataProvider) {
- rv = dataProvider->GetFlavorData(this, aFlavor, aData, aDataLen);
+ rv = dataProvider->GetFlavorData(this, aFlavor,
+ getter_AddRefs(dataBytes), &len);
if (NS_FAILED(rv))
break; // the provider failed. fall into the converter code below.
}
}
- if (*aData && *aDataLen > 0)
+ if (dataBytes && len > 0) { // XXXmats why is zero length not ok?
+ *aDataLen = len;
+ dataBytes.forget(aData);
return NS_OK;
-
+ }
break;
}
}
@@ -344,11 +350,12 @@ nsTransferable::GetTransferData(const char *aFlavor, nsISupports **aData, PRUint
nsCOMPtr dataBytes;
PRUint32 len;
data.GetData(getter_AddRefs(dataBytes), &len);
- if (len == kFlavorHasDataProvider) {
+ if (len == kFlavorHasDataProvider && dataBytes) {
// do we have a data provider?
nsCOMPtr dataProvider = do_QueryInterface(dataBytes);
if (dataProvider) {
- rv = dataProvider->GetFlavorData(this, aFlavor, getter_AddRefs(dataBytes), &len);
+ rv = dataProvider->GetFlavorData(this, aFlavor,
+ getter_AddRefs(dataBytes), &len);
if (NS_FAILED(rv))
break; // give up
}