=?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