Index: /trunk/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c
===================================================================
--- /trunk/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c	(revision 82721)
+++ /trunk/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c	(revision 82722)
@@ -214,4 +214,5 @@
     struct wined3d_shader_version shader_version;
     const DWORD *end;
+    DWORD tokens_num;
     const struct wined3d_sm1_opcode_info *opcode_table;
 };
@@ -539,5 +540,6 @@
     }
     
-    priv->end = byte_code + tokens_num;
+    priv->end = NULL;
+    priv->tokens_num = tokens_num;
 
     if (output_signature)
@@ -576,4 +578,6 @@
     struct wined3d_sm1_data *priv = data;
     DWORD version_token;
+
+    priv->end = *ptr + priv->tokens_num;
 
     version_token = *(*ptr)++;
@@ -679,9 +683,4 @@
     struct wined3d_sm1_data *priv = data;
 
-    if (*ptr >= priv->end)
-    {
-        return TRUE;
-    }
-
     if (**ptr == WINED3DSP_END)
     {
@@ -689,4 +688,6 @@
         return TRUE;
     }
+
+    AssertMsgReturn(*ptr < priv->end, ("End-of-bytecode token is missing"), TRUE);
 
     return FALSE;
Index: /trunk/src/VBox/Devices/Graphics/shaderlib/shader_sm4.c
===================================================================
--- /trunk/src/VBox/Devices/Graphics/shaderlib/shader_sm4.c	(revision 82721)
+++ /trunk/src/VBox/Devices/Graphics/shaderlib/shader_sm4.c	(revision 82722)
@@ -101,4 +101,5 @@
     struct wined3d_shader_version shader_version;
     const DWORD *end;
+    DWORD tokens_num;
     const struct wined3d_shader_signature *output_signature;
 };
@@ -238,5 +239,6 @@
     }
 
-    priv->end = byte_code + tokens_num;
+    priv->end = NULL;
+    priv->tokens_num = tokens_num;
     priv->output_signature = output_signature;
 
