Michael Stefaniuc : ddraw: Avoid unsafe IDirect3DVertexBuffer to object casts.

Alexandre Julliard julliard at winehq.org
Wed Jun 15 13:42:58 CDT 2011


Module: wine
Branch: master
Commit: ca1ee4a7c353ff911326b001c228ea867e375a74
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ca1ee4a7c353ff911326b001c228ea867e375a74

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Wed Jun 15 12:38:47 2011 +0200

ddraw: Avoid unsafe IDirect3DVertexBuffer to object casts.

---

 dlls/ddraw/ddraw.c |   18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 0faaecc..4fbabf3 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -4968,17 +4968,25 @@ static HRESULT WINAPI d3d3_CreateVertexBuffer(IDirect3D3 *iface, D3DVERTEXBUFFER
         IDirect3DVertexBuffer **vertex_buffer, DWORD flags, IUnknown *outer_unknown)
 {
     IDirectDrawImpl *This = impl_from_IDirect3D3(iface);
+    IDirect3DVertexBufferImpl *object;
     HRESULT hr;
 
     TRACE("iface %p, desc %p, vertex_buffer %p, flags %#x, outer_unknown %p.\n",
             iface, desc, vertex_buffer, flags, outer_unknown);
 
-    if (outer_unknown) return CLASS_E_NOAGGREGATION;
+    if (outer_unknown)
+        return CLASS_E_NOAGGREGATION;
+    if (!vertex_buffer || !desc)
+        return DDERR_INVALIDPARAMS;
 
-    hr = d3d7_CreateVertexBuffer(&This->IDirect3D7_iface, desc,
-            (IDirect3DVertexBuffer7 **)vertex_buffer, flags);
-    if (*vertex_buffer)
-        *vertex_buffer = (IDirect3DVertexBuffer *)&((IDirect3DVertexBufferImpl *)*vertex_buffer)->IDirect3DVertexBuffer_vtbl;
+    hr = d3d_vertex_buffer_create(&object, This, desc);
+    if (hr == D3D_OK)
+    {
+        TRACE("Created vertex buffer %p.\n", object);
+        *vertex_buffer = (IDirect3DVertexBuffer *)object;
+    }
+    else
+        WARN("Failed to create vertex buffer, hr %#x.\n", hr);
 
     return hr;
 }




More information about the wine-cvs mailing list