diff --git a/mozilla/toolkit/xre/nsAppRunner.cpp b/mozilla/toolkit/xre/nsAppRunner.cpp index 29b4764cd61..87b8812e95b 100644 --- a/mozilla/toolkit/xre/nsAppRunner.cpp +++ b/mozilla/toolkit/xre/nsAppRunner.cpp @@ -107,6 +107,11 @@ #ifdef XP_WIN #include "nsIWinAppHelper.h" +#include + +#ifndef PROCESS_DEP_ENABLE +#define PROCESS_DEP_ENABLE 0x1 +#endif #endif #include "nsCRT.h" @@ -2432,9 +2437,27 @@ static void MOZ_gdk_display_close(GdkDisplay *display) */ PRBool nspr_use_zone_allocator = PR_FALSE; +#ifdef XP_WIN +typedef BOOL (WINAPI* SetProcessDEPPolicyFunc)(DWORD dwFlags); +#endif + int XRE_main(int argc, char* argv[], const nsXREAppData* aAppData) { +#ifdef XP_WIN + /* On Windows XPSP3 and Windows Vista if DEP is configured off-by-default + we still want DEP protection: enable it explicitly and programmatically. + + This function is not available on WinXPSP2 so we dynamically load it. + */ + + HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll"); + SetProcessDEPPolicyFunc _SetProcessDEPPolicy = + (SetProcessDEPPolicyFunc) GetProcAddress(kernel32, "SetProcessDEPPolicy"); + if (_SetProcessDEPPolicy) + _SetProcessDEPPolicy(PROCESS_DEP_ENABLE); +#endif + nsresult rv; ArgResult ar; NS_TIMELINE_MARK("enter main");