X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glcaps.cpp;h=2f16b63c172febde9021a7ad1f7e3b26f41d981c;hb=bd5e1649f9c658ddfa3090ec70fb3f741a6ded76;hp=2a6993e77be1230f61d821f9bbcde304d390847f;hpb=a08d27569fa627fde3b20763624104dd83b06c99;p=apitrace diff --git a/glcaps.cpp b/glcaps.cpp index 2a6993e..2f16b63 100644 --- a/glcaps.cpp +++ b/glcaps.cpp @@ -32,6 +32,7 @@ */ +#include #include #include @@ -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;