This is an automated email from the ASF dual-hosted git repository.
ardovm pushed a commit to branch AOO42X
in repository https://gitbox.apache.org/repos/asf/openoffice.git
The following commit(s) were added to refs/heads/AOO42X by this push:
new a00902037a Catch invalid parameters detected by the Win32 runtime
library
a00902037a is described below
commit a00902037a224a09bd4efdecfbfde318513b013a
Author: Arrigo Marchiori <[email protected]>
AuthorDate: Sat Dec 6 18:58:36 2025 +0100
Catch invalid parameters detected by the Win32 runtime library
(cherry picked from commit 5251883afdfa7aed488bbefaf25b140b52763fc8)
---
main/sal/osl/w32/signal.cxx | 47 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/main/sal/osl/w32/signal.cxx b/main/sal/osl/w32/signal.cxx
index 698d3612a1..96720250aa 100644
--- a/main/sal/osl/w32/signal.cxx
+++ b/main/sal/osl/w32/signal.cxx
@@ -51,6 +51,14 @@ static oslSignalHandlerImpl* SignalList;
static long WINAPI SignalHandlerFunction(LPEXCEPTION_POINTERS lpEP);
+static _invalid_parameter_handler pPreviousInvalidParameterHandler = NULL;
+static void InvalidParameterHandlerFunction(
+ const wchar_t* expression,
+ const wchar_t* function,
+ const wchar_t* file,
+ unsigned int line,
+ uintptr_t pReserved );
+
static sal_Bool InitSignal(void)
{
HMODULE hFaultRep;
@@ -58,6 +66,10 @@ static sal_Bool InitSignal(void)
SignalListMutex = osl_createMutex();
SetUnhandledExceptionFilter(SignalHandlerFunction);
+ if ( pPreviousInvalidParameterHandler == NULL )
+ {
+ pPreviousInvalidParameterHandler =
_set_invalid_parameter_handler( InvalidParameterHandlerFunction );
+ }
hFaultRep = LoadLibrary( "faultrep.dll" );
if ( hFaultRep )
@@ -78,6 +90,11 @@ static sal_Bool DeInitSignal(void)
{
SetUnhandledExceptionFilter(NULL);
+ if ( pPreviousInvalidParameterHandler )
+ {
+ _set_invalid_parameter_handler(
pPreviousInvalidParameterHandler );
+ pPreviousInvalidParameterHandler = NULL;
+ }
osl_destroyMutex(SignalListMutex);
return sal_False;
@@ -320,6 +337,36 @@ static long WINAPI
SignalHandlerFunction(LPEXCEPTION_POINTERS lpEP)
return (EXCEPTION_CONTINUE_EXECUTION);
}
+static void InvalidParameterHandlerFunction(
+ const wchar_t* expression,
+ const wchar_t* function,
+ const wchar_t* file,
+ unsigned int line,
+ uintptr_t pReserved )
+{
+ oslSignalInfo Info;
+
+ fwprintf(stderr, L"Invalid parameter detected in function %s.\n"
+ L"File: %s\n"
+ L"Line: %u\n"
+ L"Expression: %s\n"
+ L"pReserved: %p\n", function, file, line, expression,
pReserved);
+
+ Info.Signal = osl_Signal_AccessViolation;
+ Info.UserSignal = 0;
+ Info.UserData = NULL;
+ if ( ReportCrash( NULL ) || IsWin95A() )
+ {
+ CallSignalHandler(&Info);
+ abort(); // Equivalent of osl_Signal_ActAbortApp
+ } else {
+ // Equivalent of osl_Signal_ActKillApp
+ SetErrorMode(SEM_NOGPFAULTERRORBOX);
+ exit(255);
+ }
+ // We will never reach this point
+}
+
/*****************************************************************************/
/* osl_addSignalHandler */
/*****************************************************************************/