Julian Brost 542b02621c Utility::FormatDateTime(): handle invalid format strings on Windows
On Windows, the strftime() function family invokes an invalid parameter handler
when the format string is invalid (see the "Remarks" section in their
documentation). std::put_time() shows the same behavior as it uses
_wcsftime_l() internally. The default invalid parameter handler may terminate
the process, which can be a problem given that the format string can be
specified by the user from the Icinga DSL.

Thus, temporarily set a thread-local no-op handler to disable the default one
allowing the program to continue. This then simply results in the function
returning an error which then results in an exception as we ask the stream to
throw one.

See also:
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l?view=msvc-170
https://learn.microsoft.com/en-us/cpp/c-runtime-library/parameter-validation?view=msvc-170
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/set-invalid-parameter-handler-set-thread-local-invalid-parameter-handler?view=msvc-170
2024-09-03 15:26:51 +02:00
..
2023-01-27 11:36:09 +01:00
2023-04-04 13:40:27 +02:00
2023-12-19 15:19:20 +01:00
2023-12-19 15:19:20 +01:00
2021-09-23 16:08:11 +02:00
2021-09-23 16:08:11 +02:00
2021-09-23 16:08:11 +02:00
2019-05-24 16:25:32 +02:00
2021-02-03 09:54:57 +01:00
2019-11-08 11:13:26 +01:00
2023-04-04 13:40:27 +02:00
2020-12-25 23:27:08 +01:00
2021-02-03 09:54:57 +01:00
2021-02-03 09:54:57 +01:00
2021-02-03 09:54:57 +01:00
2021-02-03 09:54:57 +01:00