[PATCH vkd3d 1/3] vkd3d: Handle NULL pointers in vkd3d_private_store_set_private_data().
Józef Kucia
joseph.kucia at gmail.com
Wed Jan 9 07:22:42 CST 2019
From: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
libs/vkd3d/utils.c | 28 +++++++++++++---------------
1 file changed, 13 insertions(+), 15 deletions(-)
diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c
index 6841bfb180d2..ed4d77fea8cd 100644
--- a/libs/vkd3d/utils.c
+++ b/libs/vkd3d/utils.c
@@ -527,6 +527,17 @@ static HRESULT vkd3d_private_store_set_private_data(struct vkd3d_private_store *
struct vkd3d_private_data *d, *old_data;
const void *ptr = data;
+ if (!data)
+ {
+ if ((d = vkd3d_private_store_get_private_data(store, tag)))
+ {
+ vkd3d_private_data_destroy(d);
+ return S_OK;
+ }
+
+ return S_FALSE;
+ }
+
if (is_object)
{
if (data_size != sizeof(IUnknown *))
@@ -584,25 +595,12 @@ HRESULT vkd3d_get_private_data(struct vkd3d_private_store *store,
HRESULT vkd3d_set_private_data(struct vkd3d_private_store *store,
const GUID *tag, unsigned int data_size, const void *data)
{
- struct vkd3d_private_data *d;
-
- if (!data)
- {
- if (!(d = vkd3d_private_store_get_private_data(store, tag)))
- return S_FALSE;
-
- vkd3d_private_data_destroy(d);
- return S_OK;
- }
-
return vkd3d_private_store_set_private_data(store, tag, data, data_size, false);
}
HRESULT vkd3d_set_private_data_interface(struct vkd3d_private_store *store,
const GUID *tag, const IUnknown *object)
{
- if (!object)
- return vkd3d_set_private_data(store, tag, sizeof(object), &object);
-
- return vkd3d_private_store_set_private_data(store, tag, object, sizeof(object), true);
+ const void *data = object ? object : (void *)&object;
+ return vkd3d_private_store_set_private_data(store, tag, data, sizeof(object), !!object);
}
--
2.19.2
More information about the wine-devel
mailing list