wined3d: Check the result from wine_rb_get() before using it in WINE_RB_ENTRY_VALUE.

Henri Verbeet hverbeet at codeweavers.com
Fri Jun 5 03:10:46 CDT 2009


---
 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)
-- 
1.6.0.6



--------------060609050709090604000508--



More information about the wine-patches mailing list