From 1e2455fa4aa34dcefed3cc550faa5e7155bedde8 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Thu, 29 Aug 2013 11:07:19 +0200 Subject: [PATCH] Fixed various memory leaks and compiler warnings. --- channels/tsmf/client/alsa/tsmf_alsa.c | 4 ++-- client/X11/xf_gdi.c | 4 ++++ client/X11/xf_rail.c | 2 +- include/freerdp/utils/debug.h | 7 ++++++- libfreerdp/core/freerdp.c | 10 +++++++++- libfreerdp/core/listener.c | 1 + libfreerdp/crypto/tls.c | 2 +- libfreerdp/utils/pcap.c | 2 ++ libfreerdp/utils/profiler.c | 3 ++- winpr/libwinpr/synch/sleep.c | 4 +++- 10 files changed, 31 insertions(+), 8 deletions(-) diff --git a/channels/tsmf/client/alsa/tsmf_alsa.c b/channels/tsmf/client/alsa/tsmf_alsa.c index 74c78a7..a6b67d7 100644 --- a/channels/tsmf/client/alsa/tsmf_alsa.c +++ b/channels/tsmf/client/alsa/tsmf_alsa.c @@ -74,11 +74,11 @@ static BOOL tsmf_alsa_open(ITSMFAudioDevice* audio, const char* device) if (!device) { if (!alsa->device[0]) - strcpy(alsa->device, "default"); + strncpy(alsa->device, "default", sizeof(alsa->device)); } else { - strcpy(alsa->device, device); + strncpy(alsa->device, device, sizeof(alsa->device)); } return tsmf_alsa_open_device(alsa); diff --git a/client/X11/xf_gdi.c b/client/X11/xf_gdi.c index 158c617..eb295cd 100644 --- a/client/X11/xf_gdi.c +++ b/client/X11/xf_gdi.c @@ -998,6 +998,8 @@ void xf_gdi_surface_bits(rdpContext* context, SURFACE_BITS_COMMAND* surface_bits surface_bits_command->destLeft, surface_bits_command->destTop, surface_bits_command->width, surface_bits_command->height); XFree(image); + free(xfc->bmp_codec_nsc); + xfc->bmp_codec_nsc = NULL; xf_gdi_surface_update_frame(xfc, surface_bits_command->destLeft, surface_bits_command->destTop, @@ -1026,6 +1028,8 @@ void xf_gdi_surface_bits(rdpContext* context, SURFACE_BITS_COMMAND* surface_bits surface_bits_command->destLeft, surface_bits_command->destTop, surface_bits_command->width, surface_bits_command->height); XFree(image); + free(xfc->bmp_codec_none); + xfc->bmp_codec_none = NULL; xf_gdi_surface_update_frame(xfc, surface_bits_command->destLeft, surface_bits_command->destTop, diff --git a/client/X11/xf_rail.c b/client/X11/xf_rail.c index 459d0f9..4e4f17f 100644 --- a/client/X11/xf_rail.c +++ b/client/X11/xf_rail.c @@ -565,7 +565,7 @@ const char* movetype_names[] = void xf_process_rail_server_localmovesize_event(xfContext* xfc, rdpChannels* channels, wMessage* event) { - int x, y; + int x = 0, y = 0; rdpRail* rail; int direction = 0; Window child_window; diff --git a/include/freerdp/utils/debug.h b/include/freerdp/utils/debug.h index eb6b613..a62ec19 100644 --- a/include/freerdp/utils/debug.h +++ b/include/freerdp/utils/debug.h @@ -23,7 +23,12 @@ #include #define DEBUG_NULL(fmt, ...) do { } while (0) -#define DEBUG_PRINT(_dbg_str, fmt, ...) fprintf(stderr, _dbg_str fmt "\n" , __FUNCTION__, __LINE__, ## __VA_ARGS__) +#define DEBUG_PRINT(_dbg_str, fmt, ...) do { \ + fprintf(stderr, _dbg_str, __FUNCTION__, __LINE__); \ + fprintf(stderr, fmt, ## __VA_ARGS__); \ + fprintf(stderr, "\n"); \ + } while( 0 ) + #define DEBUG_CLASS(_dbg_class, fmt, ...) DEBUG_PRINT("DBG_" #_dbg_class " %s (%d): ", fmt, ## __VA_ARGS__) #define DEBUG_WARN(fmt, ...) DEBUG_PRINT("Warning %s (%d): ", fmt, ## __VA_ARGS__) diff --git a/libfreerdp/core/freerdp.c b/libfreerdp/core/freerdp.c index d068bec..b0b8651 100644 --- a/libfreerdp/core/freerdp.c +++ b/libfreerdp/core/freerdp.c @@ -164,7 +164,8 @@ BOOL freerdp_connect(freerdp* instance) StreamPool_Return(rdp->transport->ReceivePool, s); } - + pcap_close(update->pcap_rfx); + update->pcap_rfx = NULL; status = TRUE; goto freerdp_connect_finally; } @@ -306,6 +307,13 @@ BOOL freerdp_disconnect(freerdp* instance) IFCALL(instance->PostDisconnect, instance); + if (instance->update->pcap_rfx) + { + instance->update->dump_rfx = FALSE; + pcap_close(instance->update->pcap_rfx); + instance->update->pcap_rfx = NULL; + } + return TRUE; } diff --git a/libfreerdp/core/listener.c b/libfreerdp/core/listener.c index fb49bf3..b74c4ec 100644 --- a/libfreerdp/core/listener.c +++ b/libfreerdp/core/listener.c @@ -306,6 +306,7 @@ static BOOL freerdp_listener_check_fds(freerdp_listener* instance) continue; #endif perror("accept"); + free(client); return FALSE; } diff --git a/libfreerdp/crypto/tls.c b/libfreerdp/crypto/tls.c index 3bcdc89..401ef43 100644 --- a/libfreerdp/crypto/tls.c +++ b/libfreerdp/crypto/tls.c @@ -592,7 +592,7 @@ BOOL tls_verify_certificate(rdpTls* tls, CryptoCert cert, char* hostname) } } - free(alt_names_length); + free(alt_names_lengths); } /* if the certificate is valid and the certificate name matches, verification succeeds */ diff --git a/libfreerdp/utils/pcap.c b/libfreerdp/utils/pcap.c index 52d912b..5e174a8 100644 --- a/libfreerdp/utils/pcap.c +++ b/libfreerdp/utils/pcap.c @@ -218,4 +218,6 @@ void pcap_close(rdpPcap* pcap) if (pcap->fp != NULL) fclose(pcap->fp); + + free(pcap); } diff --git a/libfreerdp/utils/profiler.c b/libfreerdp/utils/profiler.c index 3d8fae6..794f3e7 100644 --- a/libfreerdp/utils/profiler.c +++ b/libfreerdp/utils/profiler.c @@ -70,7 +70,8 @@ void profiler_print(PROFILER* profiler) double elapsed_sec = stopwatch_get_elapsed_time_in_seconds(profiler->stopwatch); double avg_sec = elapsed_sec / (double) profiler->stopwatch->count; - fprintf(stderr, "| %-30.30s| %10lu | %9f | %9f |\n", profiler->name, profiler->stopwatch->count, elapsed_sec, avg_sec); + fprintf(stderr, "| %-30.30s| %10lu | %9f | %9f |\n", + profiler->name, profiler->stopwatch->count, elapsed_sec, avg_sec); } void profiler_print_footer() diff --git a/winpr/libwinpr/synch/sleep.c b/winpr/libwinpr/synch/sleep.c index 096e243..6e83de7 100644 --- a/winpr/libwinpr/synch/sleep.c +++ b/winpr/libwinpr/synch/sleep.c @@ -30,7 +30,9 @@ #include #ifdef HAVE_UNISTD_H -#define _XOPEN_SOURCE 500 + #ifndef _XOPEN_SOURCE + #define _XOPEN_SOURCE 500 + #endif #include #endif -- 2.7.4