diff -u qt4-x11-4.6.2/debian/changelog qt4-x11-4.6.2/debian/changelog --- qt4-x11-4.6.2/debian/changelog +++ qt4-x11-4.6.2/debian/changelog @@ -1,3 +1,9 @@ +qt4-x11 (4:4.6.2-0ubuntu6) lucid; urgency=low + + *Prevent crashes due to Gtk based plugin such as flashplugin 10.1 by explicitly forcing the initializing of Gtk + + -- Apoorv Parle Fri, 10 Sep 2010 14:32:24 +0530 + qt4-x11 (4:4.6.2-0ubuntu5) lucid; urgency=low [ Alessandro Ghersi ] only in patch2: unchanged: --- qt4-x11-4.6.2.orig/src/3rdparty/webkit/WebCore/plugins/qt/PluginPackageQt.cpp +++ qt4-x11-4.6.2/src/3rdparty/webkit/WebCore/plugins/qt/PluginPackageQt.cpp @@ -35,6 +35,8 @@ namespace WebCore { +typedef void gtkInitFunc(int *argc, char ***argv); + bool PluginPackage::fetchInfo() { if (!load()) @@ -109,7 +111,8 @@ NP_InitializeFuncPtr NP_Initialize; NPError npErr; - + gtkInitFunc* gtkInit; + NP_Initialize = (NP_InitializeFuncPtr)m_module->resolve("NP_Initialize"); m_NPP_Shutdown = (NPP_ShutdownProcPtr)m_module->resolve("NP_Shutdown"); @@ -126,6 +129,26 @@ // 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 + } #if defined(XP_UNIX) npErr = NP_Initialize(&m_browserFuncs, &m_pluginFuncs);