summaryrefslogtreecommitdiffstats
path: root/abs/core/qt/qt-webkit-4.6.3-flash-plugin-segfault.patch
blob: 6fc87ca314a7f9dfe81ffee1503624cccf8230fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
This patch fixes WebKit Bug 40567: [Qt] QtWebKit crashes while initializing
flash plugin 10.1.53.64...
https://bugs.webkit.org/show_bug.cgi?id=40567

--- src/3rdparty/webkit/WebCore/plugins/qt/PluginPackageQt.cpp
+++ src/3rdparty/webkit/WebCore/plugins/qt/PluginPackageQt.cpp
@@ -35,4 +35,6 @@
 
 namespace WebCore {
+
+typedef void gtkInitFunc(int *argc, char ***argv);
 
 bool PluginPackage::fetchInfo()
@@ -110,4 +112,5 @@
     NP_InitializeFuncPtr NP_Initialize;
     NPError npErr;
+    gtkInitFunc* gtkInit;
 
     NP_Initialize = (NP_InitializeFuncPtr)m_module->resolve("NP_Initialize");
@@ -126,4 +129,24 @@
         // It does so in NP_Initialize with a null instance, therefore it is done this way:
         m_browserFuncs.getvalue = staticPluginQuirkRequiresGtkToolKit_NPN_GetValue;
+    }
+
+    // WORKAROUND: Prevent gtk based plugin crashes such as BR# 40567 by
+    // explicitly forcing the initializing of Gtk, i.e. calling gtk_init,
+    // whenver the symbol is present in the plugin library loaded above.
+    // Note that this workaround is based on code from the NSPluginClass ctor
+    // in KDE's kdebase/apps/nsplugins/viewer/nsplugin.cpp file.
+    gtkInit = (gtkInitFunc*)m_module->resolve("gtk_init");
+    if (gtkInit) {
+        // Prevent gtk_init() from replacing the X error handlers, since the Gtk
+        // handlers abort when they receive an X error, thus killing the viewer.
+#ifdef Q_WS_X11
+        int (*old_error_handler)(Display*, XErrorEvent*) = XSetErrorHandler(0);
+        int (*old_io_error_handler)(Display*) = XSetIOErrorHandler(0);
+#endif
+        gtkInit(0, 0);
+#ifdef Q_WS_X11
+        XSetErrorHandler(old_error_handler);
+        XSetIOErrorHandler(old_io_error_handler);
+#endif
     }