From d56ab64ed0b7a863cc2b0bf1dc78bbf3d3953226 Mon Sep 17 00:00:00 2001 From: Cathy Avery Date: Thu, 25 Jul 2019 12:32:37 +0200 Subject: [PATCH 14/16] copyPasteCompatX11.c code generating unnecessary Coverity warning RH-Author: Cathy Avery Message-id: <20190725123239.18274-15-cavery@redhat.com> Patchwork-id: 89721 O-Subject: [RHEL8.1 open-vm-tools PATCH 14/16] copyPasteCompatX11.c code generating unnecessary Coverity warning Bugzilla: 1602648 RH-Acked-by: Vitaly Kuznetsov RH-Acked-by: Miroslav Rezanina commit 9c30be3448c743e51718480543142bf833ea553a Author: Oliver Kurth Date: Mon Jun 17 11:41:38 2019 -0700 copyPasteCompatX11.c code generating unnecessary Coverity warning This patch aims to fix an issue found by Coverity Scan. This issue is a False Positive, the outBuf is only freed in specific scenario, so there is no 'BAD FREE'. But it's better to reconstruct the related code to clear the SCA error. Signed-off-by: Cathy Avery Conflicts: Minor copyright Signed-off-by: Miroslav Rezanina --- .../services/plugins/dndcp/copyPasteCompatX11.c | 43 +++++++++------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/services/plugins/dndcp/copyPasteCompatX11.c b/services/plugins/dndcp/copyPasteCompatX11.c index d5a0fdf..3b2f2bc 100644 --- a/services/plugins/dndcp/copyPasteCompatX11.c +++ b/services/plugins/dndcp/copyPasteCompatX11.c @@ -1,5 +1,5 @@ /********************************************************* - * Copyright (C) 2005-2016 VMware, Inc. All rights reserved. + * Copyright (C) 2005-2019 VMware, Inc. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published @@ -579,50 +579,41 @@ CopyPasteSelectionGetCB(GtkWidget *widget, // IN: unused return; } - /* If it is text copy paste, return gHostClipboardBuf. */ + GdkAtom target; #ifndef GTK3 - if (GDK_SELECTION_TYPE_STRING == selection_data->target || - GDK_SELECTION_TYPE_UTF8_STRING == selection_data->target) { + target = selection_data->target; #else - if (GDK_SELECTION_TYPE_STRING == gtk_selection_data_get_target(selection_data) || - GDK_SELECTION_TYPE_UTF8_STRING == gtk_selection_data_get_target(selection_data)) { + target = gtk_selection_data_get_target(selection_data); #endif + + /* If it is text copy paste, return gHostClipboardBuf. */ + if (GDK_SELECTION_TYPE_STRING == target || + GDK_SELECTION_TYPE_UTF8_STRING == target) { char *outBuf = gHostClipboardBuf; + char *outStringBuf = NULL; size_t len = strlen(gHostClipboardBuf); /* * If target is GDK_SELECTION_TYPE_STRING, assume encoding is local code * set. Convert from utf8 to local one. */ -#ifndef GTK3 - if (GDK_SELECTION_TYPE_STRING == selection_data->target && -#else - if (GDK_SELECTION_TYPE_STRING == gtk_selection_data_get_target(selection_data) && -#endif + if (GDK_SELECTION_TYPE_STRING == target && !CodeSet_Utf8ToCurrent(gHostClipboardBuf, strlen(gHostClipboardBuf), - &outBuf, + &outStringBuf, &len)) { g_debug("CopyPasteSelectionGetCB: can not convert to current codeset\n"); return; } -#ifndef GTK3 - gtk_selection_data_set(selection_data, selection_data->target, 8, -#else - gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data), 8, -#endif - outBuf, len); - g_debug("CopyPasteSelectionGetCB: Set text [%s]\n", outBuf); - -#ifndef GTK3 - if (GDK_SELECTION_TYPE_STRING == selection_data->target) { -#else - if (GDK_SELECTION_TYPE_STRING == gtk_selection_data_get_target(selection_data)) { -#endif - free(outBuf); + if (outStringBuf != NULL) { + outBuf = outStringBuf; } + gtk_selection_data_set(selection_data, target, 8, outBuf, len); + g_debug("CopyPasteSelectionGetCB: Set text [%s]\n", outBuf); + + free(outStringBuf); return; } } -- 1.8.3.1