*/
+#include <assert.h>
#include <string.h>
#include <stdlib.h>
static const char *
overrideExtensionsString(const char *extensions)
{
- int i;
+ size_t i;
ExtensionsMap::const_iterator it = extensionsMap.find(extensions);
if (it != extensionsMap.end()) {
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;
}
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;
{
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;