Fix freerdp_channels_process_message cleanup

Not all code paths did clean up the message, specifically WMQ_QUIT
This commit is contained in:
akallabeth 2021-12-16 09:46:05 +01:00 committed by akallabeth
parent 49f9f5c265
commit 19ee9f0cce

View File

@ -23,6 +23,8 @@
#include "config.h" #include "config.h"
#endif #endif
#include <winpr/assert.h>
#include <freerdp/log.h> #include <freerdp/log.h>
#include <freerdp/channels/drdynvc.h> #include <freerdp/channels/drdynvc.h>
@ -570,38 +572,45 @@ BOOL freerdp_channels_process_message_free(wMessage* message, DWORD type)
static BOOL freerdp_channels_process_message(freerdp* instance, wMessage* message) static BOOL freerdp_channels_process_message(freerdp* instance, wMessage* message)
{ {
if (message->id == WMQ_QUIT) BOOL ret = TRUE;
{ BOOL rc = FALSE;
return FALSE;
}
if (message->id == 0) WINPR_ASSERT(instance);
WINPR_ASSERT(message);
if (message->id == WMQ_QUIT)
goto fail;
else if (message->id == 0)
{ {
rdpMcsChannel* channel; rdpMcsChannel* channel;
CHANNEL_OPEN_DATA* pChannelOpenData; CHANNEL_OPEN_DATA* pChannelOpenData;
CHANNEL_OPEN_EVENT* item = (CHANNEL_OPEN_EVENT*)message->wParam; CHANNEL_OPEN_EVENT* item = (CHANNEL_OPEN_EVENT*)message->wParam;
if (!item) if (!item)
return FALSE; goto fail;
pChannelOpenData = item->pChannelOpenData; pChannelOpenData = item->pChannelOpenData;
if (pChannelOpenData->flags != 2) if (pChannelOpenData->flags != 2)
{ {
freerdp_channels_process_message_free(message, CHANNEL_EVENT_WRITE_CANCELLED); freerdp_channels_process_message_free(message, CHANNEL_EVENT_WRITE_CANCELLED);
return FALSE; goto fail;
} }
channel = channel =
freerdp_channels_find_channel_by_name(instance->context->rdp, pChannelOpenData->name); freerdp_channels_find_channel_by_name(instance->context->rdp, pChannelOpenData->name);
if (channel) if (channel)
instance->SendChannelData(instance, channel->ChannelId, item->Data, item->DataLength); ret = instance->SendChannelData(instance, channel->ChannelId, item->Data,
item->DataLength);
} }
if (!freerdp_channels_process_message_free(message, CHANNEL_EVENT_WRITE_COMPLETE)) if (!freerdp_channels_process_message_free(message, CHANNEL_EVENT_WRITE_COMPLETE))
return FALSE; goto fail;
rc = ret;
fail:
IFCALL(message->Free, message); IFCALL(message->Free, message);
return TRUE; return rc;
} }
/** /**