Henri Verbeet : wined3d: Make sure the format actually exists in init_format_texture_info().

Alexandre Julliard julliard at winehq.org
Fri Mar 27 10:06:38 CDT 2009


Module: wine
Branch: master
Commit: 5390628e6f3a0b7ea52f107a164651468af5e449
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5390628e6f3a0b7ea52f107a164651468af5e449

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Fri Mar 27 10:25:55 2009 +0100

wined3d: Make sure the format actually exists in init_format_texture_info().

---

 dlls/wined3d/utils.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 059c021..0d51701 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -429,7 +429,7 @@ static BOOL check_fbo_compat(const WineD3D_GL_Info *gl_info, GLint internal_form
     return status == GL_FRAMEBUFFER_COMPLETE_EXT;
 }
 
-static void init_format_texture_info(WineD3D_GL_Info *gl_info)
+static BOOL init_format_texture_info(WineD3D_GL_Info *gl_info)
 {
     unsigned int i;
 
@@ -438,6 +438,13 @@ static void init_format_texture_info(WineD3D_GL_Info *gl_info)
         int fmt_idx = getFmtIdx(gl_formats_template[i].fmt);
         struct GlPixelFormatDesc *desc;
 
+        if (fmt_idx == -1)
+        {
+            ERR("Format %s (%#x) not found.\n",
+                    debug_d3dformat(gl_formats_template[i].fmt), gl_formats_template[i].fmt);
+            return FALSE;
+        }
+
         desc = &gl_info->gl_formats[fmt_idx];
         desc->glInternal = gl_formats_template[i].glInternal;
         desc->glGammaInternal = gl_formats_template[i].glGammaInternal;
@@ -470,6 +477,8 @@ static void init_format_texture_info(WineD3D_GL_Info *gl_info)
             desc->rtInternal = gl_formats_template[i].glInternal;
         }
     }
+
+    return TRUE;
 }
 
 static void apply_format_fixups(WineD3D_GL_Info *gl_info)
@@ -608,7 +617,11 @@ BOOL initPixelFormats(WineD3D_GL_Info *gl_info)
 {
     if (!init_format_base_info(gl_info)) return FALSE;
 
-    init_format_texture_info(gl_info);
+    if (!init_format_texture_info(gl_info))
+    {
+        HeapFree(GetProcessHeap(), 0, gl_info->gl_formats);
+        return FALSE;
+    }
 
     apply_format_fixups(gl_info);
 




More information about the wine-cvs mailing list