changeset 433:24722d62f53c

Fixed two memory leaks in C++ side of plugin
author Adam Domurad <adomurad@redhat.com>
date Fri, 15 Jun 2012 15:27:12 -0400
parents 1819a9bbd922
children d011c27371ee
files ChangeLog plugin/icedteanp/IcedTeaNPPlugin.cc plugin/icedteanp/IcedTeaPluginUtils.cc
diffstat 3 files changed, 16 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Jun 14 11:11:01 2012 -0400
+++ b/ChangeLog	Fri Jun 15 15:27:12 2012 -0400
@@ -1,3 +1,12 @@
+2012-06-15  Adam Domurad  <adomurad@redhat.com>
+
+	Fixed two memory leaks
+	* plugin/icedteanp/IcedTeaNPPlugin.cc
+	(consume_message): Call to g_strsplit matched with call to g_strfreev.
+	* plugin/icedteanp/IcedTeaPluginUtils.cc
+	(post): Removed copy of string, which assumed consumer freed string
+	(which was not true and not always possible)
+
 2012-06-11  Danesh Dadachanji  <ddadacha@redhat.com>
 
 	PR855: AppletStub getDocumentBase() doesn't return full URL
--- a/plugin/icedteanp/IcedTeaNPPlugin.cc	Thu Jun 14 11:11:01 2012 -0400
+++ b/plugin/icedteanp/IcedTeaNPPlugin.cc	Fri Jun 15 15:27:12 2012 -0400
@@ -1303,11 +1303,14 @@
         g_free(cookie_info);
         cookie_info = NULL;
       }
+      g_strfreev (parts);
+      parts = NULL;
     }
   else
     {
         g_print ("  Unable to handle message: %s\n", message);
     }
+
 }
 
 void get_instance_from_id(int id, NPP& instance)
--- a/plugin/icedteanp/IcedTeaPluginUtils.cc	Thu Jun 14 11:11:01 2012 -0400
+++ b/plugin/icedteanp/IcedTeaPluginUtils.cc	Fri Jun 15 15:27:12 2012 -0400
@@ -1124,27 +1124,23 @@
 void
 MessageBus::post(const char* message)
 {
-	char* msg = (char*) malloc(sizeof(char)*strlen(message) + 1);
 	bool message_consumed = false;
 
-	// consumer frees this memory
-	strcpy(msg, message);
-
 	PLUGIN_DEBUG("Trying to lock %p...\n", &msg_queue_mutex);
 	pthread_mutex_lock(&subscriber_mutex);
 
-    PLUGIN_DEBUG("Message %s received on bus. Notifying subscribers.\n", msg);
+    PLUGIN_DEBUG("Message %s received on bus. Notifying subscribers.\n", message);
 
     std::list<BusSubscriber*>::const_iterator i;
     for( i = subscribers.begin(); i != subscribers.end() && !message_consumed; ++i ) {
-    	PLUGIN_DEBUG("Notifying subscriber %p of %s\n", *i, msg);
-    	message_consumed = ((BusSubscriber*) *i)->newMessageOnBus(msg);
+    	PLUGIN_DEBUG("Notifying subscriber %p of %s\n", *i, message);
+    	message_consumed = ((BusSubscriber*) *i)->newMessageOnBus(message);
     }
 
     pthread_mutex_unlock(&subscriber_mutex);
 
     if (!message_consumed)
-    	PLUGIN_DEBUG("Warning: No consumer found for message %s\n", msg);
+    	PLUGIN_DEBUG("Warning: No consumer found for message %s\n", message);
 
     PLUGIN_DEBUG("%p unlocked...\n", &msg_queue_mutex);
 }