From 781bef41ab70f158c4f2fbc0cf580067531e3ac4 Mon Sep 17 00:00:00 2001 From: jules Date: Mon, 23 Nov 2015 11:13:57 +0000 Subject: [PATCH] Added some defences in win32 against null LPARAM arguments --- .../native/juce_win32_Messaging.cpp | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/modules/juce_events/native/juce_win32_Messaging.cpp b/modules/juce_events/native/juce_win32_Messaging.cpp index 7c027529b8..36621acb69 100644 --- a/modules/juce_events/native/juce_win32_Messaging.cpp +++ b/modules/juce_events/native/juce_win32_Messaging.cpp @@ -38,15 +38,16 @@ namespace WindowsMessageHelpers void dispatchMessageFromLParam (LPARAM lParam) { - MessageManager::MessageBase* const message = reinterpret_cast (lParam); - - JUCE_TRY + if (MessageManager::MessageBase* const message = reinterpret_cast (lParam)) { - message->messageCallback(); - } - JUCE_CATCH_EXCEPTION + JUCE_TRY + { + message->messageCallback(); + } + JUCE_CATCH_EXCEPTION - message->decReferenceCount(); + message->decReferenceCount(); + } } //============================================================================== @@ -64,22 +65,27 @@ namespace WindowsMessageHelpers if (message == broadcastId) { - const ScopedPointer messageString ((String*) lParam); - MessageManager::getInstance()->deliverBroadcastMessage (*messageString); + if (String* const m = reinterpret_cast (lParam)) + { + const ScopedPointer messageString (m); + MessageManager::getInstance()->deliverBroadcastMessage (*m); + } + return 0; } if (message == WM_COPYDATA) { - const COPYDATASTRUCT* const data = reinterpret_cast (lParam); - - if (data->dwData == broadcastId) + if (const COPYDATASTRUCT* const data = reinterpret_cast (lParam)) { - const String messageString (CharPointer_UTF32 ((const CharPointer_UTF32::CharType*) data->lpData), - data->cbData / sizeof (CharPointer_UTF32::CharType)); + if (data->dwData == broadcastId) + { + const String messageString (CharPointer_UTF32 ((const CharPointer_UTF32::CharType*) data->lpData), + data->cbData / sizeof (CharPointer_UTF32::CharType)); - PostMessage (juce_messageWindowHandle, broadcastId, 0, (LPARAM) new String (messageString)); - return 0; + PostMessage (juce_messageWindowHandle, broadcastId, 0, (LPARAM) new String (messageString)); + return 0; + } } } }