[GTK] Initialize WebKitWebPlugin path to prevent double-free
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 May 2013 07:42:15 +0000 (07:42 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 May 2013 07:42:15 +0000 (07:42 +0000)
https://bugs.webkit.org/show_bug.cgi?id=115624

Patch by Tomas Popela <tpopela@redhat.com> on 2013-05-07
Reviewed by Carlos Garcia Campos.

Use GOwnPtr for WebKitWebPlugin path to prevent double-free
situations. Also use GOwnPtr for GError in webkit_web_plugin_get_path.

* webkit/webkitwebplugin.cpp:
(webkit_web_plugin_finalize):
(webkit_web_plugin_get_path):
* webkit/webkitwebpluginprivate.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@149666 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/gtk/ChangeLog
Source/WebKit/gtk/webkit/webkitwebplugin.cpp
Source/WebKit/gtk/webkit/webkitwebpluginprivate.h

index e8995b5..b8ee8d7 100644 (file)
@@ -1,3 +1,18 @@
+2013-05-07  Tomas Popela  <tpopela@redhat.com>
+
+        [GTK] Initialize WebKitWebPlugin path to prevent double-free
+        https://bugs.webkit.org/show_bug.cgi?id=115624
+
+        Reviewed by Carlos Garcia Campos.
+
+        Use GOwnPtr for WebKitWebPlugin path to prevent double-free
+        situations. Also use GOwnPtr for GError in webkit_web_plugin_get_path.
+
+        * webkit/webkitwebplugin.cpp:
+        (webkit_web_plugin_finalize):
+        (webkit_web_plugin_get_path):
+        * webkit/webkitwebpluginprivate.h:
+
 2013-05-06  Zan Dobersek  <zdobersek@igalia.com>
 
         [GTK] Move GeolocationProviderGeoclue into libPlatform
index 378e884..73b42ee 100644 (file)
@@ -63,8 +63,6 @@ static void webkit_web_plugin_finalize(GObject* object)
     WebKitWebPlugin* plugin = WEBKIT_WEB_PLUGIN(object);
     WebKitWebPluginPrivate* priv = plugin->priv;
 
-    g_free(priv->path);
-
     g_slist_foreach(priv->mimeTypes, (GFunc)freeMIMEType, 0);
     g_slist_free(priv->mimeTypes);
 
@@ -191,23 +189,20 @@ const char* webkit_web_plugin_get_path(WebKitWebPlugin* plugin)
     WebKitWebPluginPrivate* priv = plugin->priv;
 
     if (priv->path)
-        return priv->path;
+        return priv->path.get();
 
-    GError* error = 0;
-    priv->path = g_filename_from_utf8(priv->corePlugin->path().utf8().data(), -1, 0, 0, &error);
+    GOwnPtr<GError> error;
+    priv->path.set(g_filename_from_utf8(priv->corePlugin->path().utf8().data(), -1, 0, 0, &error.outPtr()));
 
     if (!error)
-        return priv->path;
+        return priv->path.get();
 
     // In the unlikely case the convertion fails, report the error and make sure we free
     // any partial convertion that ended up in the variable.
-    g_free(priv->path);
-    priv->path = 0;
+    priv->path.clear();
 
     g_warning("Failed to convert '%s' to system filename encoding: %s", priv->corePlugin->path().utf8().data(), error->message);
 
-    g_clear_error(&error);
-
     return 0;
 }
 
index 8a1ba1b..507f72e 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "webkitwebplugin.h"
 #include <glib-object.h>
+#include <wtf/gobject/GOwnPtr.h>
 #include <wtf/text/CString.h>
 
 namespace WebCore {
@@ -38,7 +39,7 @@ struct _WebKitWebPluginPrivate {
     RefPtr<WebCore::PluginPackage> corePlugin;
     CString name;
     CString description;
-    char* path;
+    GOwnPtr<char> path;
     GSList* mimeTypes;
 };