reopen 443399
tag 443399 + patch
thanks
Recalling http://www.debian.org/social_contract:
4. Our priorities are our users and free software
We will be guided by the needs of our users and the free software
community. We will place their interests first in our priorities. We
will support the needs of our users for operation in many different
kinds of computing environments. We will not object to non-free works
that are intended to be used on Debian systems, or attempt to charge a
fee to people who create or use such works.
Obviously, this bug is really Adobe's problem, and future versions of
libflashplayer.so will hopefully call gtk_init. However, as a Debian user,
I would rather that this bug be worked around for the _current_ version of
libflashplayer.so than to hear arguments about why that's aesthetically
unpleasing for some developers.
On the other hand, Adobe shouldn't be given a free pass to release new,
buggy versions of their plugin.
I've attached a patch against the Debian kdebase sources that adds a small
amount of code to detect "libflashplugin.so", compute its SHA256 hash, and
then call gtk_init_check(0,0) only if the computed hash matches one of the
hashes compiled into nspluginviewer.
This workaround-plus-hash-check resolves the immediate problem for Debian
KDE users, while maintaining an incentive for Adobe to fix its bug (since
every new version of libflashplayer.so that doesn't fix this bug will
remain broken at least until a new konqueror-nsplugins package is
released).
Alternatively, if you don't want to merge this workaround as-is, you could
modify it to refuse to load the buggy plugin, which would at least prevent
Konqueror from hanging when it runs into this bug.
--
Dwayne C. Litzenberger <[EMAIL PROTECTED]>
Patch to work around Debian Bug#443399: "Konqueror hangs with Flash contents"
Copyright (c) 2007 Dwayne C. Litzenberger <[EMAIL PROTECTED]>
This patch is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This patch is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give
permission to link the code of this patch with any edition of
the Qt library by Trolltech AS, Norway (or with modified versions
of Qt that use the same license as Qt), and distribute linked
combinations including the two. You must obey the GNU General
Public License in all respects for all of the code used other than
Qt. If you modify this file, you may extend this exception to
your version of the file, but you are not obligated to do so. If
you do not wish to do so, delete this exception statement from
your version.
diff -ruN orig/kdebase-3.5.7.dfsg.1/debian/konqueror-nsplugins.install
kdebase-3.5.7.dfsg.1/debian/konqueror-nsplugins.install
--- orig/kdebase-3.5.7.dfsg.1/debian/konqueror-nsplugins.install
2007-10-14 11:45:59.000000000 -0600
+++ kdebase-3.5.7.dfsg.1/debian/konqueror-nsplugins.install 2007-10-14
11:52:48.000000000 -0600
@@ -1,3 +1,4 @@
+debian/nspluginviewer_sha256cmp usr/bin/
debian/tmp/usr/bin/nspluginscan
debian/tmp/usr/bin/nspluginviewer
debian/tmp/usr/lib/kde3/kcm_nsplugins.la
diff -ruN orig/kdebase-3.5.7.dfsg.1/debian/nspluginviewer_sha256cmp
kdebase-3.5.7.dfsg.1/debian/nspluginviewer_sha256cmp
--- orig/kdebase-3.5.7.dfsg.1/debian/nspluginviewer_sha256cmp 1969-12-31
18:00:00.000000000 -0600
+++ kdebase-3.5.7.dfsg.1/debian/nspluginviewer_sha256cmp 2007-10-14
11:39:24.000000000 -0600
@@ -0,0 +1,11 @@
+#!/bin/sh
+# Usage: sha256cmp FILE HASH...
+set -e
+hash=`sha256sum < "$1" | awk '{ print $1 }'`
+shift
+for h in "$@" ; do
+ if test "$hash" = "$h" ; then
+ exit 0
+ fi
+done
+exit 1
diff -ruN
orig/kdebase-3.5.7.dfsg.1/debian/patches/62_nspluginviewer_gtk_workaround.diff
kdebase-3.5.7.dfsg.1/debian/patches/62_nspluginviewer_gtk_workaround.diff
---
orig/kdebase-3.5.7.dfsg.1/debian/patches/62_nspluginviewer_gtk_workaround.diff
1969-12-31 18:00:00.000000000 -0600
+++ kdebase-3.5.7.dfsg.1/debian/patches/62_nspluginviewer_gtk_workaround.diff
2007-10-14 11:38:49.000000000 -0600
@@ -0,0 +1,40 @@
+--- ../orig/kdebase-3.5.7.dfsg.1/nsplugins/viewer/nsplugin.cpp 2006-10-01
11:31:58.000000000 -0600
++++ ./nsplugins/viewer/nsplugin.cpp 2007-10-14 11:30:32.000000000 -0600
+@@ -1381,6 +1381,37 @@ int NSPluginClass::initialize()
+ _nsFuncs.invalidaterect = g_NPN_InvalidateRect;
+ _nsFuncs.invalidateregion = g_NPN_InvalidateRegion;
+ _nsFuncs.forceredraw = g_NPN_ForceRedraw;
++
++ // Workaround for buggy Adobe Flash player
++ if (_libname.endsWith(QString("libflashplayer.so"))) {
++ // Check hash of plugin
++ QString cmdline = "nspluginviewer_sha256cmp";
++ QString cmdarg = QString(_libname).replace("'", "'\\''");
++ cmdline += " '" + cmdarg + "'";
++ cmdline += "
ccde61a3923743b6060eea7a3fd5076e1cfe135eaf8daac21a6a504b498fa506";
++ int rc = system((const char *)cmdline.utf8());
++
++ // If the plugin is matched, initialize GTK+
++ if (rc == 0) {
++ typedef int (GtkInitFunction)(int *argc, char ***argv);
++ KLibrary *libgtk;
++ const char *libgtk_name = "libgtk-x11-2.0.so.0";
++
++ kdDebug(1431) << "Buggy Abobe Flash plugin detected. Enabling
workaround..." << endl;
++ libgtk =
KLibLoader::self()->library(QFile::encodeName(QString(libgtk_name)));
++ if (!libgtk) {
++ kdDebug(1431) << "workaround: Unable to load " << libgtk_name
<< ". Continuing." << endl;
++ } else {
++ GtkInitFunction *gtkInitCheck = (GtkInitFunction *)
libgtk->symbol("gtk_init_check");
++ if (!gtkInitCheck(0, 0)) {
++ kdDebug(1431) << "workaround: gtk_init_check(0,0) failed.
Continuing." << endl;
++ } else {
++ kdDebug(1431) << "workaround: gtk_init_check(0,0)
succeeded." << endl;
++ }
++ libgtk->unload();
++ }
++ }
++ }
+
+ // initialize plugin
+ NPError error = _NP_Initialize(&_nsFuncs, &_pluginFuncs);