Index: base/files/file_util_mac.mm |
diff --git a/base/files/file_util_mac.mm b/base/files/file_util_mac.mm |
index 5a99aa0e81de2e19110872cc168e53b93555d0c5..d3e14a37870faa5be28dd730b2ac126c81180e32 100644 |
--- a/base/files/file_util_mac.mm |
+++ b/base/files/file_util_mac.mm |
@@ -7,8 +7,10 @@ |
#import <Foundation/Foundation.h> |
#include <copyfile.h> |
#include <stdlib.h> |
+#include <string.h> |
#include "base/files/file_path.h" |
+#include "base/logging.h" |
#include "base/mac/foundation_util.h" |
#include "base/strings/string_util.h" |
#include "base/threading/thread_restrictions.h" |
@@ -24,10 +26,14 @@ bool CopyFile(const FilePath& from_path, const FilePath& to_path) { |
} |
bool GetTempDir(base::FilePath* path) { |
- // In order to facilitate hermetic runs on macOS, first check $TMPDIR. |
- // NOTE: $TMPDIR is ALMOST ALWAYS set on macOS (unless the user un-set it). |
- const char* env_tmpdir = getenv("TMPDIR"); |
+ // In order to facilitate hermetic runs on macOS, first check |
+ // $MAC_CHROMIUM_TMPDIR. We check this instead of $TMPDIR because external |
+ // programs currently set $TMPDIR with no effect, but when we respect it |
+ // directly it can cause crashes (like crbug.com/698759). |
+ const char* env_tmpdir = getenv("MAC_CHROMIUM_TMPDIR"); |
if (env_tmpdir) { |
+ DCHECK_LT(strlen(env_tmpdir), 50u) |
+ << "too-long TMPDIR causes socket name length issues."; |
*path = base::FilePath(env_tmpdir); |
return true; |
} |