H. Verbeet : wined3d: Better version string parsing for VENDOR_NVIDIA in

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jan 19 05:46:38 CST 2006


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

Author: H. Verbeet <hverbeet at gmail.com>
Date:   Thu Jan 19 12:39:37 2006 +0100

wined3d: Better version string parsing for VENDOR_NVIDIA in
IWineD3DImpl_FillGLCaps.

---

 dlls/wined3d/directx.c |   44 ++++++++++++++++++++++++++------------------
 1 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 466d3e4..07543bb 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -268,30 +268,38 @@ static BOOL IWineD3DImpl_FillGLCaps(Wine
         switch (gl_info->gl_vendor) {
         case VENDOR_NVIDIA:
             gl_string_cursor = strstr(gl_string, "NVIDIA");
+            if (!gl_string_cursor) {
+                ERR_(d3d_caps)("Invalid nVidia version string: %s\n", debugstr_a(gl_string));
+                break;
+            }
+
             gl_string_cursor = strstr(gl_string_cursor, " ");
-            while (*gl_string_cursor && ' ' == *gl_string_cursor) ++gl_string_cursor;
-            if (*gl_string_cursor) {
-                char tmp[16];
-                int cursor = 0;
+            if (!gl_string_cursor) {
+                ERR_(d3d_caps)("Invalid nVidia version string: %s\n", debugstr_a(gl_string));
+                break;
+            }
 
-                while (*gl_string_cursor <= '9' && *gl_string_cursor >= '0') {
-                    tmp[cursor++] = *gl_string_cursor;
-                    ++gl_string_cursor;
-                }
-                tmp[cursor] = 0;
-                major = atoi(tmp);
+            while (*gl_string_cursor == ' ') {
+                ++gl_string_cursor;
+            }
 
-                if (*gl_string_cursor != '.') WARN_(d3d_caps)("malformed GL_VERSION (%s)\n", debugstr_a(gl_string));
+            if (!*gl_string_cursor) {
+                ERR_(d3d_caps)("Invalid nVidia version string: %s\n", debugstr_a(gl_string));
+                break;
+            }
+
+            major = atoi(gl_string_cursor);
+            while (*gl_string_cursor <= '9' && *gl_string_cursor >= '0') {
                 ++gl_string_cursor;
+            }
 
-                cursor = 0;
-                while (*gl_string_cursor <= '9' && *gl_string_cursor >= '0') {
-                    tmp[cursor++] = *gl_string_cursor;
-                    ++gl_string_cursor;
-                }
-                tmp[cursor] = 0;
-                minor = atoi(tmp);
+            if (*gl_string_cursor++ != '.') {
+                ERR_(d3d_caps)("Invalid nVidia version string: %s\n", debugstr_a(gl_string));
+                break;
             }
+
+            minor = atoi(gl_string_cursor);
+
             break;
 
         case VENDOR_ATI:




More information about the wine-cvs mailing list