Closed Bug 255366 Opened 20 years ago Closed 20 years ago

File picker calls crash mozilla (open file, file attach, file browser, etc)

Categories

(Core :: XUL, defect)

x86
Linux
defect
Not set
blocker

Tracking

()

RESOLVED FIXED

People

(Reporter: harri, Assigned: caillon)

References

Details

(Keywords: 64bit, crash, helpwanted)

Attachments

(2 files)

User-Agent:       Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.2) Gecko/20040811 Debian/1.7.2-2
Build Identifier: Current snapshot of 1.8 as of Aug 11th, compiled on Debian AMD64, gcc 3.4.1

If I try to attach a file to my EMail, then Mozilla dies.

Reproducible: Always
Steps to Reproduce:
1.compose EMail
2.set a To: address, add some text
3.right klick on Attachments list, select "Attach Files"

Actual Results:  
core dump


the version of yesterday crashed, too
Here is the real build identifier:
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8a3) Gecko/20040812
Herald: Are you able to reproduce with official Mozilla nightbuild? Could you
provide TalkBack incident ID in such case?
Severity: normal → critical
Keywords: crash
AFAIK there are no nightly builds for AMD64. I grabbed the current image for x86
and installed it on another PC. There was no crash when I did a right click to
[Select Files], but when I clicked on [Cancel] in the file browser Mozilla x86
died, too. 

But maybe this is unrelated. 
The crash on x86 is not reproducable.
Any attempt to attach a file, from menu or attachment frame, causes an immediate
crash.  No other components of the message need be filled out.

AMD64, CVS HEAD, 20040813
Status: UNCONFIRMED → NEW
Ever confirmed: true
Further info, you can attach a web page, but you can not attach a file.

Unfortunately gdb and mozilla aren't playing well - when started with --debug,
mozilla hangs before realizing any widgets on screen.

Here is startup info.  Note the file picker module failure:

*** Registering nsWidgetGtk2Module components (all right -- a generic module!)
nsGenericModule nsWidgetGtk2Module: Register hook for Gtk2 File Picker
component returned error => 80040155


(Gecko:8622): GLib-GObject-WARNING **: invalid cast from GdkWindow' to GtkWindow'
/usr/local/lib/mozilla-1.8a3/run-mozilla.sh: line 131:  8622 Segmentation fault
"$prog" ${1+"$@"}

On a side note, I've often wondered why mozilla developers choose to return
numbers like 80040155 instead of an error string which is far more descriptive.
 80040155 actually sounds like a pointer location.  But I see this all over the
place.
If you twiddle gdb/moz carefully you can sometimes get somewhere.  Here is a
partially informative stack trace.  It now seems very apparent where it's
crashing, but as I can't yet get at the values passed to this function I don't
know why it blew up.


Program received signal SIGSEGV, Segmentation fault.
0x0000002a95e6f6db in gtk_file_chooser_dialog_get_type () from
/usr/lib/libgtk-x11-2.0.so.0
(gdb) bt
#0  0x0000002a95e6f6db in gtk_file_chooser_dialog_get_type () from
/usr/lib/libgtk-x11-2.0.so.0
#1  0x0000003000000020 in ?? ()
#2  0x0000000000000001 in ?? ()
#3  0x00000000008d25c0 in ?? ()
#4  0x0000002a9555fcc4 in _dl_rtld_di_serinfo () from /lib64/ld-linux-x86-64.so.2
#5  0x0000002a9e689e6a in nsIFileURL::GetIID()::iid () from
/usr/local/lib/mozilla-1.8a3/components/libwidget_gtk2.so
#6  0x0000000000000000 in ?? ()
#7  0x00000000005716e0 in ?? ()
#8  0x0000002a968eb2e8 in ?? () from /usr/lib/libgobject-2.0.so.0
#9  0x0000000000000010 in ?? ()
#10 0x0000002a968e5248 in ?? () from /usr/lib/libgobject-2.0.so.0
#11 0x00000000008d1e60 in ?? ()
#12 0x0000000000000001 in ?? ()
#13 0x0000002a968b0000 in ?? ()
#14 0x00000000000000a6 in ?? ()
#15 0x0000002a968de524 in g_type_check_instance_cast () from
/usr/lib/libgobject-2.0.so.0
#16 0x0000002a9e677106 in nsFilePicker::ReadValuesFromFileChooser ()
   from /usr/local/lib/mozilla-1.8a3/components/libwidget_gtk2.so
#17 0x0000002a984ef47e in XPTC_InvokeByIndex () from
/usr/local/lib/mozilla-1.8a3/libxpcom.so
#18 0x0000002a994ace4d in XPCWrappedNative::CallMethod () from
/usr/local/lib/mozilla-1.8a3/components/libxpconnect.so
#19 0x0000002a994b19e1 in XPC_WN_CallMethod () from
/usr/local/lib/mozilla-1.8a3/components/libxpconnect.so
#20 0x0000002a956c3f73 in js_Invoke () from /usr/local/lib/mozilla-1.8a3/libmozjs.so
#21 0x0000002a956b8c41 in js_Interpret () from
/usr/local/lib/mozilla-1.8a3/libmozjs.so
#22 0x0000002a956c42c6 in js_Invoke () from /usr/local/lib/mozilla-1.8a3/libmozjs.so
#23 0x0000002a994a5bf9 in nsXPCWrappedJSClass::CheckForException ()
   from /usr/local/lib/mozilla-1.8a3/components/libxpconnect.so
#24 0x0000002a984f00ac in PrepareAndDispatch () from
/usr/local/lib/mozilla-1.8a3/libxpcom.so
#25 0x0000002a984ef4eb in XPTC_InvokeByIndex () from
/usr/local/lib/mozilla-1.8a3/libxpcom.so
#26 0x0000002a984ef47e in XPTC_InvokeByIndex () from
/usr/local/lib/mozilla-1.8a3/libxpcom.so
#27 0x0000002a994ace4d in XPCWrappedNative::CallMethod () from
/usr/local/lib/mozilla-1.8a3/components/libxpconnect.so
#28 0x0000002a994b19e1 in XPC_WN_CallMethod () from
/usr/local/lib/mozilla-1.8a3/components/libxpconnect.so
#29 0x0000002a956c3f73 in js_Invoke () from /usr/local/lib/mozilla-1.8a3/libmozjs.so
#30 0x0000002a956b8c41 in js_Interpret () from
/usr/local/lib/mozilla-1.8a3/libmozjs.so
#31 0x0000002a956c42c6 in js_Invoke () from /usr/local/lib/mozilla-1.8a3/libmozjs.so
#32 0x0000002a956c465d in js_InternalInvoke () from
/usr/local/lib/mozilla-1.8a3/libmozjs.so
#33 0x0000002a95688e99 in JS_CallFunctionValue () from
/usr/local/lib/mozilla-1.8a3/libmozjs.so
#34 0x0000002a9a1cd9c3 in nsJSContext::CallEventHandler () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#35 0x0000002a9a20f40e in nsJSEventListener::SetEventName () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#36 0x0000002a9a078d56 in nsEventListenerManager::HandleEventSubType ()
   from /usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#37 0x0000002a9a07a266 in nsCOMPtr<nsIEventListenerManager>::nsCOMPtr ()
   from /usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#38 0x0000002a9a23579f in nsXULElement::HandleDOMEvent () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#39 0x0000002a9a23561a in nsXULElement::HandleDOMEvent () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#40 0x0000002a9a23561a in nsXULElement::HandleDOMEvent () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
---Type <return> to continue, or q <return> to quit---
#41 0x0000002a99ecbf75 in PresShell::HandleEventInternal () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#42 0x0000002a99ecc252 in PresShell::HandleEventInternal () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#43 0x0000002a9a080f1c in nsEventStateManager::CheckForAndDispatchClick ()
   from /usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#44 0x0000002a9a081e48 in nsEventStateManager::DoScrollText () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#45 0x0000002a99ecc02a in PresShell::HandleEventInternal () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#46 0x0000002a99eccc7b in PresShell::RetargetEventToParent () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#47 0x0000002a9a1c64fe in nsViewManager::HandleEvent () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#48 0x0000002a9a1c6c01 in nsViewManager::HandleEvent () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#49 0x0000002a9a1b99c7 in nsView::GetViewFor () from
/usr/local/lib/mozilla-1.8a3/components/libgklayout.so
#50 0x0000002a9e66d0c9 in nsCommonWidget::DispatchResizeEvent ()
   from /usr/local/lib/mozilla-1.8a3/components/libwidget_gtk2.so
#51 0x0000002a9e660ca6 in nsWindow::OnButtonReleaseEvent () from
/usr/local/lib/mozilla-1.8a3/components/libwidget_gtk2.so
#52 0x0000002a9e663260 in getter_AddRefs<nsISupports> () from
/usr/local/lib/mozilla-1.8a3/components/libwidget_gtk2.so
#53 0x0000002a95ebc976 in _gtk_marshal_BOOLEAN__BOXED () from
/usr/lib/libgtk-x11-2.0.so.0
#54 0x0000002a968bd02a in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#55 0x0000002a968d25ea in g_signal_has_handler_pending () from
/usr/lib/libgobject-2.0.so.0
#56 0x0000002a968d39fd in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#57 0x0000002a968d40e3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#58 0x0000002a95fa6d80 in gtk_widget_activate () from /usr/lib/libgtk-x11-2.0.so.0
#59 0x0000002a95eba95e in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0
#60 0x0000002a95ebace5 in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0
#61 0x0000002a961ee750 in _gdk_events_queue () from /usr/lib/libgdk-x11-2.0.so.0
#62 0x0000002a96b1e56d in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#63 0x0000002a96b20247 in g_main_context_acquire () from /usr/lib/libglib-2.0.so.0
#64 0x0000002a96b205e5 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#65 0x0000002a95eba141 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#66 0x0000002a9e66ab41 in nsCOMPtr<nsIEventQueue>::operator
nsDerivedSafe<nsIEventQueue>* ()
   from /usr/local/lib/mozilla-1.8a3/components/libwidget_gtk2.so
#67 0x0000000000423e1a in ?? ()
#68 0x000000000041ba63 in main ()
isn't this the same as bug 255604 (similar stacks)
bug 255604 does indeed look like a dupe of this bug.

here is my build configuration, exchange disable-debug for enable, and
cflags/strip naturally; cflags would be -O2 -g with cpu/arch the same.

about:buildconfig

Build platform
target
x86_64-unknown-linux-gnu

Build tools
Compiler 	Version 	Compiler flags

gcc 	gcc version 3.4.1 20040803 (Gentoo Linux 3.4.1-r2, ssp-3.4-2,
pie-8.7.6.5) 	-Wall -W -Wno-unused -Wpointer-arith -Wcast-align -Wno-long-long
-pedantic -pthread -pipe

g++ 	gcc version 3.4.1 20040803 (Gentoo Linux 3.4.1-r2, ssp-3.4-2,
pie-8.7.6.5) 	-fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith
-Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy
-Wno-non-virtual-dtor -Wno-long-long -pedantic -fshort-wchar -pthread -pipe
-I/usr/X11R6/include

Configure arguments
--disable-ldap --disable-gnomevfs --disable-gnomeui --disable-accessibility
--disable-tests --disable-debug '--enable-optimize=-Os -fomit-frame-pointer
-pipe -march=opteron -mtune=opteron -ffast-math -mfpmath=sse,387
-fexpensive-optimizations' --enable-strip --disable-toolkit-qt --enable-calendar
--enable-xft --enable-xprint --enable-crypto --enable-reorder
--enable-xterm-updates --enable-toolkit-gtk2 --enable-default-toolkit=gtk2
--enable-x11-shm --enable-freetype2 --enable-extensions=default
--without-system-nspr --with-system-jpeg --with-system-zlib --with-system-png
--with-system-mng 
*** Bug 255604 has been marked as a duplicate of this bug. ***
Reassigning, please see end comment on bug 255604.
Assignee: sspitzer → caillon
Component: Mail Window Front End → XP Toolkit/Widgets
Product: MailNews → Browser
Summary: crash on "Attach file" → File picker calls crash mozilla (open file, file attach, file browser, etc)
(gdb) l 
391     NS_IMETHODIMP 
392     nsFilePicker::Show(PRInt16 *aReturn) 
393     { 
394       NS_ENSURE_ARG_POINTER(aReturn); 
395 
396       nsXPIDLCString title; 
397       title.Adopt(ToNewUTF8String(mTitle)); 
398 
399       GtkWidget *parent = 
(GtkWidget*)mParentWidget->GetNativeData(NS_NATIVE_WIDGET); 
400       GtkFileChooserAction action = GetGtkFileChooserAction(mMode); 
401       const gchar *accept_button = (mMode == GTK_FILE_CHOOSER_ACTION_SAVE) 
402                                    ? GTK_STOCK_SAVE : GTK_STOCK_OPEN; 
403 
404       GtkWidget *file_chooser = 
405           _gtk_file_chooser_dialog_new(title, GTK_WINDOW(parent), action, 
406                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 
407                                        accept_button, GTK_RESPONSE_ACCEPT, 
408                                        NULL); 
409       if (mMode == nsIFilePicker::modeOpenMultiple) { 
410         _gtk_file_chooser_set_select_multiple
(GTK_FILE_CHOOSER(file_chooser), TRUE); 
 
(gdb) p title 
$4 = {<nsCString> = {<nsCSubstring> = {<nsACString> = {mVTable = 0xac2ff0, 
        mData = 0x2a984f123e 
"\205ΐtnA\203ώ\005w*H\213T$\020D\211πA�ΖH\211,ΒA�ΕH\203Γ\030E9ύr€H\203Δ\030
[]A\\A]A^A_ΓI\211,$I\203Δ\bλΫfff\220H\215{\020θ§ρχ�\017Άΐ\203ψ\fw\022H\215\025\220'\002",

mLength = 3221200880, 
        mFlags = 0}, <No data fields>}, <No data fields>}, <No data fields>} 
(gdb) p parent 
$5 = (GtkWidget *) 0x1 
(gdb) p action 
$6 = 16154736 
(gdb) p accept_button 
$7 = (const gchar *) 0x2a9c9a8e41 "gtk-save" 
(gdb) p mtitle 
No symbol "mtitle" in current context. 
(gdb) p mTitle 
$8 = {<nsSubstring> = {<nsAString> = {mVTable = 0x54def0, mData = 0xf67518, 
      mLength = 9, mFlags = 5}, <No data fields>}, <No data fields>} 
 
the 'parent' pointer looks suspicious. 
file xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_linux.cpp, line 205: I
am not sure, but doesn't "methodAddress += 8 * methodIndex" break the 16-byte
alignment necessary for amd64? 

Regards

Harri
Does AMD64's ABI (as used on Linux) really require 16-byte alignment?  I don't
have an x86-64 machine to test on, but that would surprise me tremendously,
since it would mean that you couldn't densely pack native (8-byte == 64-bit)
pointers.

I'm always happy to learn, though, so a pointer to a reference correcting me
would be welcome.
Stack pointers must be aligned to 16 bytes in 64bit mode. See 
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24592.pdf,
3.73, Page 94. But I am not sure whether this is the problem here.
Requesting blocking, this is starting to show up with a lot of people and it's a
fairly necessary item.
Flags: blocking1.8a4?
I could reproduce the broken parent in nsFilePicker::Show() : 

(gdb) print *parent
$4 = {object = {parent_instance = {g_type_instance = {g_class = 0x56e460},
ref_count = 2, qdata = 0x567220}, flags = 16503664}, private_flags = 53824,
state = 251 'û', saved_state = 0 '\0', name = 0x76d8c0 "\200\214y", style = 0x0,
requisition = {width = 0, height = 0}, allocation = {x = 0, y = 0, width =
5671232, height = 0}, window = 0x0, parent = 0x0}

But I do not know yet where this comes from. That is successfully hidden 
by Smart Pointers. 

Using brute force I checked when this problem was introduced. The snapshot in
nightly/2004-08-07-07-trunk/mozilla-source.tar.bz2 works, but the version
nightly/2004-08-08-07-trunk/mozilla-source.tar.bz2 is broken. The changes
include some new stuff in gtk2/nsFilePicker.{cpp,h}, gtk2/nsWidgetFactory.cpp
and the filepicker.properties. I can post the complete diffs, if somebody is
interested.


Regards

Harri
Yes, please do
Severity: critical → blocker
Maybe this helps: On amd64 I get a message 

:
Document http://www.kernel.org/pub/linux/kernel/ loaded successfully
Document http://www.kernel.org/pub/linux/kernel/v2.6/ loaded successfully
Document http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.8.1.gz loaded
successfully
(Gecko:13592): GLib-GObject-WARNING **: invalid cast from `GdkWindow' to `GtkWindow'

immediately before the crash. When I try the same on i386, then there is no
message about an invalid cast.
Also occurs on Firefox 1.0 preview as well as CVS trunk. I have an i386 (P4
2.8GHz) and I also see the invalid cast message. Occurs when opening any file
chooser (i.e. open file, import bookmarks).
On i386 this seems to be a problem with the GTK+ 2.5 series; it works fine with
v2.4.9.
Comment on attachment 159629 [details] [diff] [review]
Make our prototype for _gtk_file_chooser_dialog_new_fn() match reality (patch by bryner)

Chris, was this done this way intentionally, or would this be more appropriate
here?
Attachment #159629 - Flags: superreview+
Attachment #159629 - Flags: review?(caillon)
Comment on attachment 159629 [details] [diff] [review]
Make our prototype for _gtk_file_chooser_dialog_new_fn() match reality (patch by bryner)

Hm, cool.
Attachment #159629 - Flags: review?(caillon) → review+
Fixed.
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Flags: blocking1.8a4?
Sorry, but I cannot share your optimism here. 

I've compiled the new Mozilla sources on AMD64. The core dump is gone, but I
still don't get the standard file picker that I get on i386. I get a strange
looking file picker with a floppy on the save button. It doesn't match the look
of other Mozilla components. 

And I've got an assertion failure:

(Gecko:12493): Gtk-CRITICAL **: file gtkwindow.c: line 1883
(gtk_window_set_transient_for): assertion `parent == NULL || GTK_IS_WINDOW
(parent)' failed

If you think this is a serious problem, then would you mind to reopen this bug
report?
Harald, this bug is about the crash only.  The assertion is fixed with the patch
in bug 260872.  The new dialog is the GTK2 dialog, which Mozilla is now using.
Sorry, but since the new file picker looks so _completely_ different than the
rest of Mozilla (especially for the Modern theme), I thought that there is still
a serious problem.

I liked the old file picker of 1.7.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: