]> git.cworth.org Git - apitrace/blobdiff - glcaps.cpp
TODO: Fix typo in the description of the range specification.
[apitrace] / glcaps.cpp
index 2a6993e77be1230f61d821f9bbcde304d390847f..2f16b63c172febde9021a7ad1f7e3b26f41d981c 100644 (file)
@@ -32,6 +32,7 @@
  */
 
 
+#include <assert.h>
 #include <string.h>
 #include <stdlib.h>
 
@@ -65,7 +66,7 @@ static const char *extra_extensions[] = {
 static const char *
 overrideExtensionsString(const char *extensions)
 {
-    int i;
+    size_t i;
 
     ExtensionsMap::const_iterator it = extensionsMap.find(extensions);
     if (it != extensionsMap.end()) {
@@ -81,7 +82,11 @@ overrideExtensionsString(const char *extensions)
         extra_extensions_len += extra_extension_len + 1;
     }
 
-    char *new_extensions = (char *)malloc(extensions_len + 1 + extra_extensions_len);
+    // We use malloc memory instead of a std::string because we need to ensure
+    // that extensions strings will not move in memory as the extensionsMap is
+    // updated.
+    size_t new_extensions_len = extensions_len + 1 + extra_extensions_len + 1;
+    char *new_extensions = (char *)malloc(new_extensions_len);
     if (!new_extensions) {
         return extensions;
     }
@@ -102,7 +107,8 @@ overrideExtensionsString(const char *extensions)
         extensions_len += extra_extension_len;
         new_extensions[extensions_len++] = ' ';
     }
-    new_extensions[extensions_len] = '\0';
+    new_extensions[extensions_len++] = '\0';
+    assert(extensions_len <= new_extensions_len);
 
     extensionsMap[extensions] = new_extensions;
 
@@ -154,8 +160,8 @@ __glGetStringi_override(GLenum name, GLuint index)
         {
             GLint num_extensions = 0;
             __glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
-            if (num_extensions <= index && index < num_extensions + NUM_EXTRA_EXTENSIONS) {
-                return (const GLubyte *)extra_extensions[index - num_extensions];
+            if ((GLuint)num_extensions <= index && index < (GLuint)num_extensions + NUM_EXTRA_EXTENSIONS) {
+                return (const GLubyte *)extra_extensions[index - (GLuint)num_extensions];
             }
         }
         break;