diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2012-09-05 08:35:07 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2012-09-05 08:46:49 +0200 |
commit | a82e532ce006c54b2740de74d1da5d11307da7c1 (patch) | |
tree | 6f1a21ad2b2656a63e6d11cd3750f271dc85f55e /sal | |
parent | rc and unorc seem mandatory nowadays, etc (diff) | |
download | core-a82e532ce006c54b2740de74d1da5d11307da7c1.tar.gz core-a82e532ce006c54b2740de74d1da5d11307da7c1.zip |
fdo#38913: Prevent invalid parameter handler crashes
It appears that on Windows at least some jvm.dll versions can cause calls to
_fileno(NULL), which leads to a call of the invalid parameter handler (see
<http://msdn.microsoft.com/en-us/library/ksazx244%28v=vs.80%29.aspx> "Parameter
Validation: Visual Studio 2005"). The default handler causes the application to
crash, so install a "harmless" one instead.
Change-Id: Id6a3ffb63f70b0c65546bc933e994c8dbf35203c
Diffstat (limited to 'sal')
-rw-r--r-- | sal/osl/w32/salinit.cxx | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sal/osl/w32/salinit.cxx b/sal/osl/w32/salinit.cxx index 5390c9285f16..aaa5a5b321c3 100644 --- a/sal/osl/w32/salinit.cxx +++ b/sal/osl/w32/salinit.cxx @@ -26,6 +26,10 @@ * ************************************************************************/ +#include "sal/config.h" + +#include <iostream> +#include <stdlib.h> #include "system.h" #include <osl/process.h> @@ -35,6 +39,23 @@ extern "C" { #endif +// _set_invalid_parameter_handler appears unavailable with MinGW: +#if defined _MSC_VER +namespace { + +extern "C" void invalidParameterHandler( + wchar_t const * expression, wchar_t const * function, wchar_t const * file, + unsigned int line, SAL_UNUSED_PARAMETER uintptr_t) +{ + std::wcerr + << L"Invalid parameter in \"" << (expression ? expression : L"???") + << L"\" (" << (function ? function : L"???") << ") at " + << (file ? file : L"???") << L':' << line << std::endl; +} + +} +#endif + // Prototypes for initialization and deinitialization of SAL library SAL_DLLPUBLIC void SAL_CALL sal_detail_initialize(int argc, char ** argv) @@ -86,6 +107,14 @@ SAL_DLLPUBLIC void SAL_CALL sal_detail_initialize(int argc, char ** argv) // How to handle a very unlikely error ??? } +#if defined _MSC_VER // appears unavailable with MinGW + // It appears that at least some jvm.dll versions can cause calls to + // _fileno(NULL), which leads to a call of the invalid parameter handler, + // and the default handler causes the application to crash, so install a + // "harmless" one (cf. fdo#38913): + _set_invalid_parameter_handler(&invalidParameterHandler); +#endif + osl_setCommandArgs(argc, argv); } |