From fe2e4264afa440c1332f186dae088b62e27beea3 Mon Sep 17 00:00:00 2001 From: David PHAM-VAN Date: Tue, 28 Jun 2016 14:39:29 -0700 Subject: [PATCH] Fix Memory Leaks in RdpSnd --- channels/rdpsnd/client/mac/rdpsnd_mac.c | 2 ++ channels/rdpsnd/client/rdpsnd_main.c | 4 ++++ channels/rdpsnd/client/winmm/rdpsnd_winmm.c | 3 +++ 3 files changed, 9 insertions(+) mode change 100644 => 100755 channels/rdpsnd/client/rdpsnd_main.c diff --git a/channels/rdpsnd/client/mac/rdpsnd_mac.c b/channels/rdpsnd/client/mac/rdpsnd_mac.c index 3c7f13c8d..a73f8ac7f 100644 --- a/channels/rdpsnd/client/mac/rdpsnd_mac.c +++ b/channels/rdpsnd/client/mac/rdpsnd_mac.c @@ -327,6 +327,8 @@ static void rdpsnd_mac_waveplay(rdpsndDevicePlugin* device, RDPSND_WAVE* wave) length = wave->length > audioBuffer->mAudioDataBytesCapacity ? audioBuffer->mAudioDataBytesCapacity : wave->length; CopyMemory(audioBuffer->mAudioData, wave->data, length); + free(wave->data); + wave->data = NULL; audioBuffer->mAudioDataByteSize = length; audioBuffer->mUserData = wave; diff --git a/channels/rdpsnd/client/rdpsnd_main.c b/channels/rdpsnd/client/rdpsnd_main.c old mode 100644 new mode 100755 index 2133339d8..baf0c6401 --- a/channels/rdpsnd/client/rdpsnd_main.c +++ b/channels/rdpsnd/client/rdpsnd_main.c @@ -7,6 +7,7 @@ * Copyright 2012-2013 Marc-Andre Moreau * Copyright 2015 Thincast Technologies GmbH * Copyright 2015 DI (FH) Martin Haimberger + * Copyright 2016 David PHAM-VAN * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -1476,6 +1477,9 @@ static VOID VCAPITYPE rdpsnd_virtual_channel_init_event(LPVOID pInitHandle, UINT break; case CHANNEL_EVENT_TERMINATED: + if (plugin->thread != NULL) + if ((error = rdpsnd_virtual_channel_event_disconnected(plugin))) + WLog_ERR(TAG, "rdpsnd_virtual_channel_event_disconnected failed with error %lu!", error); rdpsnd_virtual_channel_event_terminated(plugin); break; } diff --git a/channels/rdpsnd/client/winmm/rdpsnd_winmm.c b/channels/rdpsnd/client/winmm/rdpsnd_winmm.c index 57336ba64..aa9367fee 100644 --- a/channels/rdpsnd/client/winmm/rdpsnd_winmm.c +++ b/channels/rdpsnd/client/winmm/rdpsnd_winmm.c @@ -6,6 +6,7 @@ * Copyright 2010-2012 Vic Lee * Copyright 2015 Thincast Technologies GmbH * Copyright 2015 DI (FH) Martin Haimberger + * Copyright 2016 David PHAM-VAN * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -136,6 +137,7 @@ static void CALLBACK rdpsnd_winmm_callback_function(HWAVEOUT hwo, UINT uMsg, DWO winmm->device.WaveConfirm(&(winmm->device), wave); free(lpWaveHdr->lpData); + free(lpWaveHdr); free(wave); } @@ -330,6 +332,7 @@ void rdpsnd_winmm_wave_play(rdpsndDevicePlugin* device, RDPSND_WAVE* wave) { WLog_ERR(TAG, "waveOutWrite failure: %d", mmResult); waveOutUnprepareHeader(winmm->hWaveOut, lpWaveHdr, sizeof(WAVEHDR)); + free(lpWaveHdr); return; } }