From eab0c872c43486e670cb0157f83910982e3ad10b Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 13 Dec 2019 14:55:15 +1100 Subject: Use safe mechanism for converting between function pointers and void*. --- qt/ScintillaEditBase/PlatQt.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'qt/ScintillaEditBase/PlatQt.cpp') diff --git a/qt/ScintillaEditBase/PlatQt.cpp b/qt/ScintillaEditBase/PlatQt.cpp index 515052a48..3d285a337 100644 --- a/qt/ScintillaEditBase/PlatQt.cpp +++ b/qt/ScintillaEditBase/PlatQt.cpp @@ -1119,17 +1119,17 @@ public: } Function FindFunction(const char *name) override { if (lib) { - // C++ standard doesn't like casts between function pointers and void pointers so use a union - union { + // Use memcpy as it doesn't invoke undefined or conditionally defined behaviour. #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) - QFunctionPointer fp; + QFunctionPointer fp {}; #else - void *fp; + void *fp = nullptr; #endif - Function f; - } fnConv; - fnConv.fp = lib->resolve(name); - return fnConv.f; + fp = lib->resolve(name); + Function f = nullptr; + static_assert(sizeof(f) == sizeof(fp)); + memcpy(&f, &fp, sizeof(f)); + return f; } return nullptr; } -- cgit v1.2.3