From d1cc8d0fa5d87096aca2b24fa178d41e833e53eb Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Mon, 2 Jun 2025 07:48:53 +1000 Subject: [PATCH] Added kernel32-limit_heap_old_exe patchset --- ...Limit-old-exe-to-3MB-available-space.patch | 36 +++++++++++++++++++ .../kernel32-limit_heap_old_exe/definition | 1 + 2 files changed, 37 insertions(+) create mode 100644 patches/kernel32-limit_heap_old_exe/0001-kernel32-Limit-old-exe-to-3MB-available-space.patch create mode 100644 patches/kernel32-limit_heap_old_exe/definition diff --git a/patches/kernel32-limit_heap_old_exe/0001-kernel32-Limit-old-exe-to-3MB-available-space.patch b/patches/kernel32-limit_heap_old_exe/0001-kernel32-Limit-old-exe-to-3MB-available-space.patch new file mode 100644 index 00000000..2b3add36 --- /dev/null +++ b/patches/kernel32-limit_heap_old_exe/0001-kernel32-Limit-old-exe-to-3MB-available-space.patch @@ -0,0 +1,36 @@ +From 764a3b19afc7519fa9568a402e094a944d56055c Mon Sep 17 00:00:00 2001 +From: Akihiro Sagawa +Date: Sun, 1 Jun 2025 15:42:40 +1000 +Subject: [PATCH] kernel32: Limit old exe to 3MB available space + +Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=44931 +--- + dlls/kernel32/heap.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c +index 1ec2f5cce0d..834f4d07e9b 100644 +--- a/dlls/kernel32/heap.c ++++ b/dlls/kernel32/heap.c +@@ -475,12 +475,15 @@ VOID WINAPI GlobalMemoryStatus( LPMEMORYSTATUS lpBuffer ) + if ( lpBuffer->dwAvailPhys + lpBuffer->dwAvailPageFile >= 2U*1024*1024*1024) + lpBuffer->dwAvailPageFile = 2U*1024*1024*1024 - lpBuffer->dwAvailPhys - 1; + +- /* limit page file size for really old binaries */ ++ /* limit value for really old binaries */ ++ /* use MAXLONG/2, so that dwAvailPhys + dwAvailPageFile < MAXLONG */ + if (nt->OptionalHeader.MajorSubsystemVersion < 4 || + nt->OptionalHeader.MajorOperatingSystemVersion < 4) + { +- if (lpBuffer->dwTotalPageFile > MAXLONG) lpBuffer->dwTotalPageFile = MAXLONG; +- if (lpBuffer->dwAvailPageFile > MAXLONG) lpBuffer->dwAvailPageFile = MAXLONG; ++ lpBuffer->dwTotalPhys = min(lpBuffer->dwTotalPhys, MAXLONG / 2); ++ lpBuffer->dwAvailPhys = min(lpBuffer->dwAvailPhys, MAXLONG / 2); ++ lpBuffer->dwTotalPageFile = min(lpBuffer->dwTotalPageFile, MAXLONG / 2); ++ lpBuffer->dwAvailPageFile = min(lpBuffer->dwAvailPageFile, MAXLONG / 2); + } + #endif + +-- +2.47.2 + diff --git a/patches/kernel32-limit_heap_old_exe/definition b/patches/kernel32-limit_heap_old_exe/definition new file mode 100644 index 00000000..af2a9484 --- /dev/null +++ b/patches/kernel32-limit_heap_old_exe/definition @@ -0,0 +1 @@ +Fixes: [44931] kernel32: Limit old exe to 3MB available space