Module: wine Branch: master Commit: cae6a32b0807bebd5a7dc317c4241de3496ad367 URL: http://source.winehq.org/git/wine.git/?a=commit;h=cae6a32b0807bebd5a7dc317c4...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Jun 5 10:10:46 2009 +0200
wined3d: Check the result from wine_rb_get() before using it in WINE_RB_ENTRY_VALUE.
---
dlls/wined3d/glsl_shader.c | 5 +++-- dlls/wined3d/utils.c | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 89b1e03..bd91bc9 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -3277,6 +3277,7 @@ static void add_glsl_program_entry(struct shader_glsl_priv *priv, struct glsl_sh static struct glsl_shader_prog_link *get_glsl_program_entry(struct shader_glsl_priv *priv, IWineD3DVertexShader *vshader, IWineD3DPixelShader *pshader, struct vs_compile_args *vs_args, struct ps_compile_args *ps_args) { + struct wine_rb_entry *entry; glsl_program_key_t key;
key.vshader = vshader; @@ -3284,8 +3285,8 @@ static struct glsl_shader_prog_link *get_glsl_program_entry(struct shader_glsl_p key.vs_args = *vs_args; key.ps_args = *ps_args;
- return WINE_RB_ENTRY_VALUE(wine_rb_get(&priv->program_lookup, &key), - struct glsl_shader_prog_link, program_lookup_entry); + entry = wine_rb_get(&priv->program_lookup, &key); + return entry ? WINE_RB_ENTRY_VALUE(entry, struct glsl_shader_prog_link, program_lookup_entry) : NULL; }
/* GL locking is done by the caller */ diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index e4c09c8..596bccb 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -2103,7 +2103,8 @@ void gen_ffp_frag_op(IWineD3DStateBlockImpl *stateblock, struct ffp_frag_setting const struct ffp_frag_desc *find_ffp_frag_shader(const struct wine_rb_tree *fragment_shaders, const struct ffp_frag_settings *settings) { - return WINE_RB_ENTRY_VALUE(wine_rb_get(fragment_shaders, settings), struct ffp_frag_desc, entry); + struct wine_rb_entry *entry = wine_rb_get(fragment_shaders, settings); + return entry ? WINE_RB_ENTRY_VALUE(entry, struct ffp_frag_desc, entry) : NULL; }
void add_ffp_frag_shader(struct wine_rb_tree *shaders, struct ffp_frag_desc *desc)