Ivan Gyurdiev : wined3d: Fix NULL dereference in generator function.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jun 7 09:13:40 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 83a9666f9c8a80ef55b1807174d0d660f9991277
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=83a9666f9c8a80ef55b1807174d0d660f9991277

Author: Ivan Gyurdiev <ivg2 at cornell.edu>
Date:   Tue Jun  6 23:40:16 2006 -0400

wined3d: Fix NULL dereference in generator function.

---

 dlls/wined3d/baseshader.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index ee54a5e..1968a11 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -623,6 +623,9 @@ void generate_base_shader(
     shader_reg_maps reg_maps;
 
     /* Initialize current parsing state */
+    SHADER_OPCODE_ARG hw_arg;
+    hw_arg.shader = iface;
+    hw_arg.buffer = buffer;
     This->baseShader.parse_state.current_row = 0;
 
     /* First pass: figure out which temporary and texture registers are used */
@@ -662,22 +665,19 @@ void generate_base_shader(
             /* Read opcode */
             opcode_token = *pToken++;
             curOpcode = shader_get_opcode(iface, opcode_token);
-            hw_fct = (wined3d_settings.shader_mode == 
-                    SHADER_GLSL ? curOpcode->hw_glsl_fct : curOpcode->hw_fct);
+            hw_fct = (curOpcode == NULL)? NULL:
+                     (wined3d_settings.shader_mode == SHADER_GLSL)?
+                         curOpcode->hw_glsl_fct : curOpcode->hw_fct;
 
             /* Unknown opcode and its parameters */
-           if (NULL == curOpcode) {
-              FIXME("Unrecognized opcode: token=%08lX\n", opcode_token);
-              pToken += shader_skip_unrecognized(iface, pToken); 
+            if (NULL == curOpcode) {
+                FIXME("Unrecognized opcode: token=%08lX\n", opcode_token);
+                pToken += shader_skip_unrecognized(iface, pToken); 
 
             /* If a generator function is set for current shader target, use it */
             } else if (hw_fct != NULL) {
 
-                SHADER_OPCODE_ARG hw_arg;
-
-                hw_arg.shader = iface;
                 hw_arg.opcode = curOpcode;
-                hw_arg.buffer = buffer;
 
                 if (curOpcode->num_params > 0) {
 




More information about the wine-cvs mailing list