116 lines
4.3 KiB
Diff
116 lines
4.3 KiB
Diff
From d56ab64ed0b7a863cc2b0bf1dc78bbf3d3953226 Mon Sep 17 00:00:00 2001
|
|
From: Cathy Avery <cavery@redhat.com>
|
|
Date: Thu, 25 Jul 2019 12:32:37 +0200
|
|
Subject: [PATCH 14/16] copyPasteCompatX11.c code generating unnecessary
|
|
Coverity warning
|
|
|
|
RH-Author: Cathy Avery <cavery@redhat.com>
|
|
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 <vkuznets@redhat.com>
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
|
commit 9c30be3448c743e51718480543142bf833ea553a
|
|
Author: Oliver Kurth <okurth@vmware.com>
|
|
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 <cavery@redhat.com>
|
|
|
|
Conflicts: Minor copyright
|
|
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
---
|
|
.../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
|
|
|