Module: wine Branch: master Commit: de82b55b209c454c903f25bb4dff5a1628f8c325 URL: http://source.winehq.org/git/wine.git/?a=commit;h=de82b55b209c454c903f25bb4d...
Author: Henri Verbeet hverbeet@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");