[rfc][icedtea-web] Fix 2 memory leaks in C++ side of icedtea-web plugin
Deepak Bhole
dbhole at redhat.com
Fri Jun 15 11:32:58 PDT 2012
* Adam Domurad <adomurad at redhat.com> [2012-06-15 14:20]:
> This patch fixes two memory leaks in the C++ side of the plugin, and
> removes a misleading (ie, wrong) comment.
>
> The g_strsplit was stumbled on, and then searching for (alloc\(|free\()
> was fairly good at highlighting malloc/free pairs (of which one a free
> was missing.)
>
Assuming LiveConnect tests showed no regression on Firefox or Chrome, OK
for head.
Cheers,
Deepak
> ChangeLog:
> 2012-06-15 Adam Domurad <adomurad at 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)
>
> diff --git a/plugin/icedteanp/IcedTeaNPPlugin.cc b/plugin/icedteanp/IcedTeaNPPlugin.cc
> --- a/plugin/icedteanp/IcedTeaNPPlugin.cc
> +++ b/plugin/icedteanp/IcedTeaNPPlugin.cc
> @@ -1303,11 +1303,14 @@ void consume_message(gchar* message) {
> 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)
> diff --git a/plugin/icedteanp/IcedTeaPluginUtils.cc b/plugin/icedteanp/IcedTeaPluginUtils.cc
> --- a/plugin/icedteanp/IcedTeaPluginUtils.cc
> +++ b/plugin/icedteanp/IcedTeaPluginUtils.cc
> @@ -1124,27 +1124,23 @@ MessageBus::unSubscribe(BusSubscriber* b
> 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);
> }
More information about the distro-pkg-dev
mailing list