Index: lib/sanitizer_common/sanitizer_symbolizer_linux.cc =================================================================== --- lib/sanitizer_common/sanitizer_symbolizer_linux.cc +++ lib/sanitizer_common/sanitizer_symbolizer_linux.cc @@ -36,6 +36,23 @@ static const int kSymbolizerStartupTimeMillis = 10; +void UnsetEnvVar(const char name[]) { + uptr name_length = internal_strlen(name); + uptr i; + int var_index = -1; + for (i = 0; environ[i]; i++) { + if (internal_strlen(environ[i]) >= name_length + 1 && + internal_strncmp(environ[i], name, name_length) == 0 && + environ[i][name_length] == '=') + var_index = i; + } + if (var_index < 0) + return; + // environ[i - 1] is the last nonzero entry. + environ[var_index] = environ[i - 1]; + environ[i - 1] = 0; +} + bool StartSymbolizerSubprocess(const char *path_to_symbolizer, int *input_fd, int *output_fd) { if (!FileExists(path_to_symbolizer)) { @@ -100,6 +117,7 @@ internal_close(infd[1]); for (int fd = getdtablesize(); fd > 2; fd--) internal_close(fd); + UnsetEnvVar("LD_PRELOAD"); execl(path_to_symbolizer, path_to_symbolizer, (char*)0); internal__exit(1); }