Closed Bug 1187406 Opened 9 years ago Closed 9 years ago

LastPass' Secure Notes File Upload crashes Firefox

Categories

(Core :: Widget: Gtk, defect)

x86_64
Linux
defect
Not set
critical

Tracking

()

RESOLVED FIXED
Tracking Status
firefox42 --- affected

People

(Reporter: johnp, Unassigned)

References

Details

Using LastPass' Secure Notes File-Upload Firefox crashes without Crash-Reporter on Fedora 22. This happens with the latest development build of LastPass.

I didn't check other file-upload instances, but this bug may also be a more general one, judging from the console output:


> ./firefox -g -d gdb

(firefox:29241): GLib-GObject-WARNING **: The property GtkSettings:gtk-menu-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(firefox:29241): GLib-GObject-WARNING **: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version.
console.error: 
  [CustomizableUI]
  Custom widget with id loop-button does not return a valid node
ATTENTION: default value of option force_s3tc_enable overridden by environment.
Can't find symbol 'glXCreateContextAttribsARB'.
console.error: 
  [CustomizableUI]
  Custom widget with id loop-button does not return a valid node
Shumway is registered

(plugin-container:29322): GLib-GObject-WARNING **: The property GtkSettings:gtk-menu-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29322): GLib-GObject-WARNING **: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29314): GLib-GObject-WARNING **: The property GtkSettings:gtk-menu-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29314): GLib-GObject-WARNING **: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29313): GLib-GObject-WARNING **: The property GtkSettings:gtk-menu-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29313): GLib-GObject-WARNING **: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29323): GLib-GObject-WARNING **: The property GtkSettings:gtk-menu-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29319): GLib-GObject-WARNING **: The property GtkSettings:gtk-menu-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29323): GLib-GObject-WARNING **: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29304): GLib-GObject-WARNING **: The property GtkSettings:gtk-menu-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29304): GLib-GObject-WARNING **: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29319): GLib-GObject-WARNING **: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29307): GLib-GObject-WARNING **: The property GtkSettings:gtk-menu-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29307): GLib-GObject-WARNING **: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29309): GLib-GObject-WARNING **: The property GtkSettings:gtk-menu-images is deprecated and shouldn't be used anymore. It will be removed in a future version.

(plugin-container:29309): GLib-GObject-WARNING **: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version.
console.error: self-destructing-cookies: 
  localstorage: 
  Component returned failure code: 0x804b000a (NS_ERROR_MALFORMED_URI) [nsIIOService.newURI]

(firefox:29241): Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
[Child 29304] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29304] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29309] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29309] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29307] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29307] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29323] WARNING: pipe error (3): Connection reset by peer: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 459
[Child 29323] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29323] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29322] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29322] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29313] WARNING: pipe error (3): Connection reset by peer: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 459
[Child 29313] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29313] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29314] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29314] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29319] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
[Child 29319] ###!!! ABORT: Aborting on channel error.: file /builds/slave/m-cen-l64-ntly-000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 1753
Trace/breakpoint trap (core dumped)
(ERROR)-(Exit Code 133)-(Fatal error signal 5)
The issue here is that LastPass is trying to link against GTK2, which cannot occur in the same address space as GTK3 symbols.

I don't think we want to support plugins linking against GTK2- they should be fairly rare anyway. Thoughts, Jorge?
Flags: needinfo?(jorge)
CC'ing drew from LastPass
I assume this is referring to the e10s build of LastPass, since the production build uses the built-in nsIFilePicker.

I can reproduce on Firefox nightly.  Loading libgtk-3.so.0 instead of libglib-2.0.so.0 appears to resolve the issue.  However, I can't simply switch, or the current release of Firefox will crash.

Anyone know a good way of detecting which version of GTK the current process is using?
(In reply to Andrew Zitnay from comment #3)
> I assume this is referring to the e10s build of LastPass, since the
> production build uses the built-in nsIFilePicker.
> 
> I can reproduce on Firefox nightly.  Loading libgtk-3.so.0 instead of
> libglib-2.0.so.0 appears to resolve the issue.  However, I can't simply
> switch, or the current release of Firefox will crash.
> 
> Anyone know a good way of detecting which version of GTK the current process
> is using?

You could probably just use gtk_check_version(3, 0, 0) == NULL to determine if the runtime version is compatible with GTK3.
(In reply to Andrew Comminos [:acomminos] from comment #1)
> I don't think we want to support plugins linking against GTK2- they should
> be fairly rare anyway. Thoughts, Jorge?

They should be very rare, yes, so I think this is a problem that can be solve case by case.
Flags: needinfo?(jorge)
(In reply to Andrew Comminos [:acomminos] from comment #4)
> (In reply to Andrew Zitnay from comment #3)
> > I assume this is referring to the e10s build of LastPass, since the
> > production build uses the built-in nsIFilePicker.
> > 
> > I can reproduce on Firefox nightly.  Loading libgtk-3.so.0 instead of
> > libglib-2.0.so.0 appears to resolve the issue.  However, I can't simply
> > switch, or the current release of Firefox will crash.
> > 
> > Anyone know a good way of detecting which version of GTK the current process
> > is using?
> 
> You could probably just use gtk_check_version(3, 0, 0) == NULL to determine
> if the runtime version is compatible with GTK3.

Hmm...  I think that presents me with a bit of a catch-22, since I can't call gtk_check_version() until I load libgtk, but I don't know what version of libgtk to load until I call gtk_check_version().

This may or may not be a bad way to resolve this, but it's my understanding that GTK 3 is only in use in Firefox 42 (nightly) right now.  Is it guaranteed that Firefox 41 and below will remain on GTK 2, and Firefox 42+ will remain on GTK 3, or could this change?  If it's set in stone, I could simply load based on Firefox version.
Alright, I think I've come up with a solution.  I'm now calling dlopen() on libgtk-3.so.0 with RTLD_NOLOAD, so that it only succeeds if GTK 3 is already loaded within Firefox.  If it fails, I call dlopen() on libgtk-x11-2.0.so.0 like before.

I've rebuilt with this fix:

https://rodan.lastpass.com/dev/lp_e10s.xpi

You may need to restart Firefox after installing to ensure the new binary component is in use (I need to look at why this is happening).
Thank you Andrew!
I just verified the fix works as expected.

I'm therefore closing this bug. If there's something else to do (e.g. Developer Release Notes extra foot-note to the GTK3-switch) that has to be tracked, please re-open or add the (rare) addon-compat issue somewhere else.
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.