From 9cfb01187cbbdcf453a32cd8bdff21311376fcd7 Mon Sep 17 00:00:00 2001 From: David Vogel Date: Thu, 8 Feb 2024 16:12:55 +0100 Subject: [PATCH] Fix invalid memory access in capture.dll --- bin/capture-b/Capture.pb | 18 ++++++++++++------ bin/capture-b/capture.dll | Bin 231936 -> 231936 bytes 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/bin/capture-b/Capture.pb b/bin/capture-b/Capture.pb index dafaa56..5fe0d8c 100644 --- a/bin/capture-b/Capture.pb +++ b/bin/capture-b/Capture.pb @@ -3,6 +3,8 @@ ; This software is released under the MIT License. ; https://opensource.org/licenses/MIT +EnableExplicit + UsePNGImageEncoder() Declare Worker(*Dummy) @@ -26,6 +28,8 @@ Structure WorkerInfo workerNumber.i EndStructure +#Workers = 8 + ; Returns the size of the main OpenGL rendering output. ProcedureDLL GetGLViewportSize(*dims.GLViewportDims) If Not *dims @@ -61,16 +65,16 @@ ProcedureDLL AttachProcess(Instance) CreateDirectory("mods/noita-mapcap/output/") - Static Workers = 8 - Dim WorkerInfos.WorkerInfo(Workers-1) - For i = 0 To Workers-1 + Static Dim WorkerInfos.WorkerInfo(#Workers-1) + Protected i + For i = 0 To #Workers-1 WorkerInfos(i)\workerNumber = i CreateThread(@Worker(), @WorkerInfos(i)) Next EndProcedure Procedure Worker(*workerInfo.WorkerInfo) - Protected img, x, y + Protected img, x, y, sx, sy Repeat WaitSemaphore(Semaphore) @@ -110,6 +114,8 @@ ProcedureDLL Capture(*capRect.RECT, x.l, y.l, sx.l, sy.l) ProcedureReturn #False EndIf + Protected imageID, hDC, *pixelBuffer + ; Limit the desired capture area to the actual client area of the viewport. If *capRect\left < 0 : *capRect\left = 0 : EndIf If *capRect\top < 0 : *capRect\top = 0 : EndIf @@ -182,8 +188,8 @@ EndProcedure ; IDE Options = PureBasic 6.04 LTS (Windows - x64) ; ExecutableFormat = Shared dll -; CursorPosition = 94 -; FirstLine = 51 +; CursorPosition = 116 +; FirstLine = 99 ; Folding = - ; Optimizer ; EnableThread diff --git a/bin/capture-b/capture.dll b/bin/capture-b/capture.dll index 062608631bc1a548fa19574c5db96a4844a800c9..b51cbc1b5e4dcffe41e8c6c50219309a133698ac 100644 GIT binary patch delta 10441 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 delta 10486 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