i-rinat / freshplayerplugin

ppapi2npapi compatibility layer
MIT License
727 stars 52 forks source link

[webupd8 PPA] - Freshplayer-plugin causes Typecatcher (libwebkitgtk-3.0) to crash #335

Closed nyanpasu64 closed 7 years ago

nyanpasu64 commented 8 years ago

OS: Ubuntu 16.04 x64, WebUpd8 Freshplayer PPA.

Typecatcher is a Google Fonts viewer/downloader.

Procedure

apt-get install browser-plugin-freshplayer-pepperflash

Run typecatcher.

Result

Typecatcher takes longer than normal to load. It segfaults before showing a GUI. I debugged the crash using gdb:

gdb /usr/bin/python3
run /usr/bin/typecatcher
bt
#0  0x00007ffff7de0d20 in ?? () from /lib64/ld-linux-x86-64.so.2
...
#6  0x00007ffff73e6f09 in ?? () from /lib/x86_64-linux-gnu/libdl.so.2
#7  0x00007ffff7de7394 in ?? () from /lib64/ld-linux-x86-64.so.2
#8  0x00007ffff73e7571 in ?? () from /lib/x86_64-linux-gnu/libdl.so.2
#9  0x00007ffff73e6fa1 in dlopen () from /lib/x86_64-linux-gnu/libdl.so.2
#10 0x00007ffff57bb911 in g_module_open ()
   from /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0
#11 0x00007fffe333f073 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libwebkitgtk-3.0.so.0
...

Apparently, freshplayerplugin is crashing /usr/lib/x86_64-linux-gnu/libwebkitgtk-3.0.so.0 .

i-rinat commented 8 years ago

Hello.

I tried typecatcher on freshly installed Ubuntu 16.04 amd64 in virtual machine, and it worked fine there.

But here is what happens. Typecatcher uses GTK+ 3 version of WebKitGTK. When it loads freshplayerplugin, it brings GTK+ 2 into the same address space. Different major versions of GTK+ sometimes load together without error, but sometimes they fail, as in your case.

GTK+ 3 build of Firefox uses a special trick — it loads GTK+ 3 in the main browser process, but GTK+ 2 in plugin-container process, because (NPAPI) Flash 11.2 is linked with GTK+ 2. WebKit2GTK also uses a separate plugin host process. To solve exactly the same issue.

So while it's possible to link freshplayerplugin with GTK+ 3 to solve your issue, it will cause issues in Firefox and other browsers.

i-rinat commented 8 years ago

Nonetheless, there is a way to link freshplayerplugin with GTK+ 3. Use

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_GTK=3 ..

at configuration step, and then usual make.

I think, that will fix crashing Typecatcher. But most probably freshplayerplugin in Firefox will crash.

nyanpasu64 commented 8 years ago

Why does Freshplayer (Flash?) require GTK+ at all?

On Sat, Jun 11, 2016 at 1:07 PM, Rinat Ibragimov notifications@github.com wrote:

Nonetheless, there is a way to link freshplayerplugin with GTK+ 3. Use

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_GTK=3 ..

at configuration step, and then usual make.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/i-rinat/freshplayerplugin/issues/335#issuecomment-225391500, or mute the thread https://github.com/notifications/unsubscribe/AA3yJdrLm7EWk4azRuI9Xmee5ZDDDohYks5qKxWRgaJpZM4Iwh06 .

i-rinat commented 8 years ago

Why does Freshplayer (Flash?) require GTK+ at all?

It's used for:

I don't think any of these could be implemented without X event loop. Currently, GLib and GTK+ do event handling.

nyanpasu64 commented 8 years ago

is it possible to prevent freshplayer from loading in libwebkitgtk?

i-rinat commented 8 years ago

is it possible to prevent freshplayer from loading in libwebkitgtk?

I don't know a working recipe. But it should be possible, it's a software, after all.

If you were asking about whenever could it be done in freshplayerplugin itself, answer is no. Any filtering code in freshwrapper have a chance to execute only when plugin is loaded. But by that time you already have two major GTK+ versions in the same address space already.

So it should be filtering code in WebKitGTK. I believe, there already should be a way to disable all plugins completely.

i-rinat commented 8 years ago

I've just added implementation for #336, which now allows freshplayerplugin to get required functions at run time. It's no longer linked to GTK+ directly, and the same binary can survive in GTK+ 3 and GTK+ 2 applications.

I saw no crashes in virtual machine with Ubuntu 16.04, but saw both GTK+ versions loaded. With new freshwrapper version I see only GTK+ 3. There was GTK+ 2 from NPAPI Flash, but once I removed it, there only GTK+ 3 left. Didn't try actual Flash content though. Test page with Flash content works too, and process have only GTK+ 3.

Could you test again with the recent version to see if that fixes the bug?

nyanpasu64 commented 8 years ago

well I installed freshplayer from PPA, in other words, a binary package.

do I need to compile and overwrite the system package?

On Sat, Jun 18, 2016 at 1:00 PM, Rinat Ibragimov notifications@github.com wrote:

I've just added implementation for #336 https://github.com/i-rinat/freshplayerplugin/issues/336, which now allows freshplayerplugin to get required functions at run time. It's no longer linked to GTK+ directly, and the same binary can survive in GTK+ 3 and GTK+ 2 applications.

I saw no crashes in virtual machine with Ubuntu 16.04, but saw both GTK+ versions loaded. With new freshwrapper version I see only GTK+ 3. There was GTK+ 2 from NPAPI Flash, but once I removed it, there only GTK+ 3 left. Didn't try actual Flash content though.

Could you test again with the recent version to see if that fixes the bug?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/i-rinat/freshplayerplugin/issues/335#issuecomment-226962065, or mute the thread https://github.com/notifications/unsubscribe/AA3yJYCGo1F6I8ph17gELDZ4iDPWVaT1ks5qNE5ygaJpZM4Iwh06 .

i-rinat commented 8 years ago

do I need to compile and overwrite the system package?

Yep. Compiling is a required step. But you don't need to install it to test. You just set environment variables VDPAU_DRIVER=va_gl and VDPAU_DRIVER_PATH=$PWD (last assumes you are in the build directory. $PWD is a special variable which points to current directory.) And then try to launch VLC from the same terminal emulator session. Or you can just overwrite existing instance of libvdpau_va_gl.so.1 in system directory.

i-rinat commented 8 years ago

(Oh, I don't know what I'm reading. Was doing changes to another project recently. Ignore previous comment.)

do I need to compile and overwrite the system package?

Yes, compilation is a required step. As for installing, you can either overwrite existing binary, or put compiled binary into ~/.mozilla/plugins/. In latter case, it's better to remove previously installed package.

nyanpasu64 commented 8 years ago

I still get a crash, with make install, system freshplayerplugin uninstalled, apt-get autoremove. Manually removing /usr/local/lib/mozilla/plugins/libfreshwrapper-flashplayer.so fixes the crash.

http://hastebin.com/raw/cidupijacu

i-rinat commented 8 years ago

http://hastebin.com/raw/cidupijacu

Backtrace looks odd: it crashes inside dynamic library loader, before any bit of freshplayerplugin have a chance to execute.

By the way, is there NPAPI Flash (11.2) plugin installed in your system?

mschwendt commented 8 years ago

Also crashes webkitgtk as used by Claws Mail: https://bugzilla.redhat.com/1348985

i-rinat commented 8 years ago

Linker script is used to hide weak library symbols. They tend to appear if any C++ is used. I hide them because combination of ABI change in gcc 5, Firefox's custom allocator, and freshwrapper caused mixing of general libc6 allocator and jemalloc. But I can't figure out whenever this is the reason, and if it is, how to fix it.

Crashing inside dynamic linker is something beyond my comprehension.

nyanpasu64 commented 8 years ago

By the way, is there NPAPI Flash (11.2) plugin installed in your system?

I just uninstalled it, didn't help.

i-rinat commented 8 years ago

@jimbo1qaz, It would be nice if you could create a virtual machine image where bug could be reproduced. I tried different combinations, but it worked fine, without crashes.

nyanpasu64 commented 7 years ago

funny, I created a Debian VM with freshplayer from git, and pepperflashplugin-nonfree. It doesn't crash, and displays "NOT SANDBOXED" and opens like normal. I'll try with Ubuntu git, then Ubuntu PPA.

On my main PC, I get some "interesting" messages that didn't appear before: http://hastebin.com/agiruziqay.vhdl

I think my system is somewhat screwy. Other apps also misbehave in unusual ways.