aboutsummaryrefslogtreecommitdiff
path: root/mail/thunderbird/files
diff options
context:
space:
mode:
Diffstat (limited to 'mail/thunderbird/files')
-rw-r--r--mail/thunderbird/files/patch-bug123327540
1 files changed, 40 insertions, 0 deletions
diff --git a/mail/thunderbird/files/patch-bug1233275 b/mail/thunderbird/files/patch-bug1233275
new file mode 100644
index 000000000000..949558662729
--- /dev/null
+++ b/mail/thunderbird/files/patch-bug1233275
@@ -0,0 +1,40 @@
+# Copy environment for IPC using NSPR to avoid race
+
+diff --git a/ipc/chromium/src/base/process_util_bsd.cc b/ipc/chromium/src/base/process_util_bsd.cc
+--- mozilla/ipc/chromium/src/base/process_util_bsd.cc
++++ mozilla/ipc/chromium/src/base/process_util_bsd.cc
+@@ -13,6 +13,7 @@
+
+ #include <string>
+
++#include "nspr.h"
+ #include "base/eintr_wrapper.h"
+ #include "base/file_util.h"
+ #include "base/logging.h"
+@@ -48,7 +49,6 @@
+
+ #ifdef HAVE_POSIX_SPAWN
+ #include <spawn.h>
+-extern "C" char **environ __dso_public;
+ #endif
+
+ namespace {
+@@ -114,6 +114,7 @@ bool LaunchApp(const std::vector<std::st
+ // Existing variables are overwritten by env_vars_to_set.
+ int pos = 0;
+ environment_map combined_env_vars = env_vars_to_set;
++ char **environ = PR_DuplicateEnvironment();
+ while(environ[pos] != NULL) {
+ std::string varString = environ[pos];
+ std::string varName = varString.substr(0, varString.find_first_of('='));
+@@ -121,8 +122,9 @@ bool LaunchApp(const std::vector<std::st
+ if (combined_env_vars.find(varName) == combined_env_vars.end()) {
+ combined_env_vars[varName] = varValue;
+ }
+- pos++;
++ PR_Free(environ[pos++]);
+ }
++ PR_Free(environ);
+ int varsLen = combined_env_vars.size() + 1;
+
+ char** vars = new char*[varsLen];