Henri Verbeet : wined3d: Refuse to parse shaders with an invalid version token.

Alexandre Julliard julliard at winehq.org
Mon Oct 26 10:08:33 CDT 2009


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Oct 26 10:12:17 2009 +0100

wined3d: Refuse to parse shaders with an invalid version token.

---

 dlls/wined3d/shader_sm1.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/dlls/wined3d/shader_sm1.c b/dlls/wined3d/shader_sm1.c
index aef817e..64876b3 100644
--- a/dlls/wined3d/shader_sm1.c
+++ b/dlls/wined3d/shader_sm1.c
@@ -506,7 +506,18 @@ static int shader_skip_unrecognized(const struct wined3d_sm1_data *priv, const D
 
 static void *shader_sm1_init(const DWORD *byte_code, const struct wined3d_shader_signature *output_signature)
 {
-    struct wined3d_sm1_data *priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv));
+    struct wined3d_sm1_data *priv;
+    BYTE major, minor;
+
+    major = WINED3D_SM1_VERSION_MAJOR(*byte_code);
+    minor = WINED3D_SM1_VERSION_MINOR(*byte_code);
+    if (WINED3D_SHADER_VERSION(major, minor) > WINED3D_SHADER_VERSION(3, 0))
+    {
+        WARN("Invalid shader version %u.%u (%#x).\n", major, minor, *byte_code);
+        return NULL;
+    }
+
+    priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv));
     if (!priv)
     {
         ERR("Failed to allocate private data\n");




More information about the wine-cvs mailing list