*/
+#include <assert.h>
#include <string.h>
#include <stdlib.h>
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;