=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Handle NULL pointers in vkd3d_private_store_set_private_data().
Alexandre Julliard
julliard at winehq.org
Thu Jan 10 11:35:57 CST 2019
Module: vkd3d
Branch: master
Commit: 5a1408c78dafdeb98d156141f1aaeed552449632
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=5a1408c78dafdeb98d156141f1aaeed552449632
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Wed Jan 9 14:22:42 2019 +0100
vkd3d: Handle NULL pointers in vkd3d_private_store_set_private_data().
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 6841bfb..ed4d77f 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);
}
More information about the wine-cvs
mailing list