From b747448330e543c8c57b85fc46e1fad511218d74 Mon Sep 17 00:00:00 2001 From: narzoul Date: Thu, 1 Aug 2019 21:55:56 +0200 Subject: [PATCH] Readded buffer overflow fix for Diablo 1 See issue #3. --- DDrawCompat/Config/Config.h | 1 + DDrawCompat/Gdi/VirtualScreen.cpp | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/DDrawCompat/Config/Config.h b/DDrawCompat/Config/Config.h index 420e8b5..3ef60c6 100644 --- a/DDrawCompat/Config/Config.h +++ b/DDrawCompat/Config/Config.h @@ -9,4 +9,5 @@ namespace Config const int delayedFlipModeTimeout = 200; const int maxPaletteUpdatesPerMs = 5; const int minExpectedFlipsPerSec = 5; + const int virtualScreenBufferExtraRows = 2; } diff --git a/DDrawCompat/Gdi/VirtualScreen.cpp b/DDrawCompat/Gdi/VirtualScreen.cpp index 9fac26c..97ad09f 100644 --- a/DDrawCompat/Gdi/VirtualScreen.cpp +++ b/DDrawCompat/Gdi/VirtualScreen.cpp @@ -1,5 +1,6 @@ #include +#include "Config/Config.h" #include "Common/ScopedCriticalSection.h" #include "D3dDdi/Device.h" #include "D3dDdi/ScopedCriticalSection.h" @@ -229,8 +230,8 @@ namespace Gdi CloseHandle(g_surfaceFileMapping); } - g_surfaceFileMapping = CreateFileMapping( - INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, g_pitch * g_height, nullptr); + g_surfaceFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, + g_pitch * (g_height + Config::virtualScreenBufferExtraRows), nullptr); g_surfaceView = MapViewOfFile(g_surfaceFileMapping, FILE_MAP_WRITE, 0, 0, 0); for (HDC dc : g_dcs)