summaryrefslogtreecommitdiffstats
path: root/toolkit/xre/nsWindowsWMain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/xre/nsWindowsWMain.cpp')
-rw-r--r--toolkit/xre/nsWindowsWMain.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/toolkit/xre/nsWindowsWMain.cpp b/toolkit/xre/nsWindowsWMain.cpp
index 7eb9e11046..2a91deec5c 100644
--- a/toolkit/xre/nsWindowsWMain.cpp
+++ b/toolkit/xre/nsWindowsWMain.cpp
@@ -111,9 +111,32 @@ static void FreeAllocStrings(int argc, char** argv) {
delete[] argv;
}
+// Remove "/prefetch:##" argument from the command line, if present. (See
+// GeckoChildProcessHost.cpp for details.)
+//
+// Colons are not permitted in path-elements on Windows, so a string of this
+// form is extremely unlikely to appear with the intent of being a legitimate
+// path-argument.
+void RemovePrefetchArguments(int& argc, WCHAR** argv) {
+ size_t prefetchArgsCount [[maybe_unused]] = 0;
+ for (int i = 0; i < argc; ++i) {
+ constexpr const wchar_t prefix[] = L"/prefetch:";
+ auto const cmp = wcsncmp(argv[i], prefix, ARRAYSIZE(prefix) - 1);
+ if (cmp == 0) {
+ std::copy(argv + i + 1, argv + argc, argv + i);
+ --argc;
+ --i;
+ prefetchArgsCount++;
+ }
+ }
+ MOZ_ASSERT(prefetchArgsCount <= 1,
+ "at most one /prefetch:## argument should be present");
+}
+
int wmain(int argc, WCHAR** argv) {
SanitizeEnvironmentVariables();
SetDllDirectoryW(L"");
+ RemovePrefetchArguments(argc, argv);
// Only run this code if LauncherProcessWin.h was included beforehand, thus
// signalling that the hosting process should support launcher mode.