Rico Schüller : d3dx9: Parse elements in d3dx9_parse_resource().
Alexandre Julliard
julliard at winehq.org
Wed Jul 13 12:16:34 CDT 2011
Module: wine
Branch: master
Commit: 340643af30f1df399f6735588a885410b7085508
URL: http://source.winehq.org/git/wine.git/?a=commit;h=340643af30f1df399f6735588a885410b7085508
Author: Rico Schüller <kgbricola at web.de>
Date: Wed Jul 13 10:45:40 2011 +0200
d3dx9: Parse elements in d3dx9_parse_resource().
---
dlls/d3dx9_36/effect.c | 18 +++++++++++++++---
1 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
index b4f1932..0b0c436 100644
--- a/dlls/d3dx9_36/effect.c
+++ b/dlls/d3dx9_36/effect.c
@@ -4737,7 +4737,7 @@ err_out:
static HRESULT d3dx9_parse_resource(struct ID3DXBaseEffectImpl *base, const char *data, const char **ptr)
{
DWORD technique_index;
- DWORD index, state_index, usage;
+ DWORD index, state_index, usage, element_index;
struct d3dx_state *state;
struct d3dx_parameter *param;
HRESULT hr = E_FAIL;
@@ -4748,10 +4748,11 @@ static HRESULT d3dx9_parse_resource(struct ID3DXBaseEffectImpl *base, const char
read_dword(ptr, &index);
TRACE("index: %u\n", index);
- skip_dword_unknown(ptr, 1);
+ read_dword(ptr, &element_index);
+ TRACE("element_index: %u\n", element_index);
read_dword(ptr, &state_index);
- TRACE("state: %u\n", state_index);
+ TRACE("state_index: %u\n", state_index);
read_dword(ptr, &usage);
TRACE("usage: %u\n", usage);
@@ -4768,6 +4769,17 @@ static HRESULT d3dx9_parse_resource(struct ID3DXBaseEffectImpl *base, const char
}
parameter = get_parameter_struct(base->parameter_handles[index]);
+ if (element_index != 0xffffffff)
+ {
+ if (element_index >= parameter->element_count && parameter->element_count != 0)
+ {
+ FIXME("Index out of bounds: element_index %u >= element_count %u\n", element_index, parameter->element_count);
+ return E_FAIL;
+ }
+
+ if (parameter->element_count != 0) parameter = get_parameter_struct(parameter->member_handles[element_index]);
+ }
+
sampler = parameter->data;
if (state_index >= sampler->state_count)
{
More information about the wine-cvs
mailing list