| Summary: | Gabble crashes in File Transfer | ||
|---|---|---|---|
| Product: | Telepathy | Reporter: | Alban Crequy <alban.crequy> |
| Component: | gabble | Assignee: | Telepathy bugs list <telepathy-bugs> |
| Status: | RESOLVED FIXED | QA Contact: | Telepathy bugs list <telepathy-bugs> |
| Severity: | normal | ||
| Priority: | medium | Keywords: | patch |
| Version: | unspecified | ||
| Hardware: | Other | ||
| OS: | All | ||
| URL: | http://git.collabora.co.uk/?p=user/cassidy/telepathy-gabble;a=shortlog;h=refs/heads/ft-fixes | ||
| Whiteboard: | |||
| i915 platform: | i915 features: | ||
- gabble_file_transfer_channel_provide_file() does not check the state of the channel (it only check it is an outgoing channel) - gabble_file_transfer_channel_accept_file() does not check the channel is ingoing and not outgoing (it only check it is pending channel) (In reply to comment #1) > - gabble_file_transfer_channel_provide_file() does not check the state of the > channel (it only check it is an outgoing channel) Looking at the code it checks: - if the channel is an outgoing one - if socket_address has already been defined. I'd say the only missing case is: - Alice offers a file to Bob - Bob declines the file offer - Alice calls ProvideFile - An error should be raised Do you agree? I added checks in http://git.collabora.co.uk/?p=user/cassidy/telepathy-gabble;a=shortlog;h=refs/heads/ft-fixes Merged to master and 0.8. |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.
telepathy-gabble 0.8.2-1 #0 0xb7f3b832 in ?? () from /lib/ld-linux.so.2 #1 0xb7a903d0 in raise () from /lib/i686/cmov/libc.so.6 #2 0xb7a93a85 in abort () from /lib/i686/cmov/libc.so.6 #3 0xb7c281dc in IA__g_assertion_message (domain=0x80d4ca7 "gabble", file=0x80edd90 "ft-channel.c", line=1569, func=0x80ee25d "get_local_unix_socket_path", message=0x0) at /build/buildd-glib2.0_2.20.5-1-i386-mDnYKw/glib2.0-2.20.5/glib/gtestutils.c:1301 #4 0x080baf49 in setup_local_socket (self=0xa20f000, address_type=TP_SOCKET_ADDRESS_TYPE_UNIX, access_control=TP_SOCKET_ACCESS_CONTROL_LOCALHOST, access_control_param=0xa23bcc0) at ft-channel.c:1808 #5 0x080bb948 in gabble_file_transfer_channel_accept_file (iface=0xa20f000, address_type=0, access_control=0, access_control_param=0xa23bcc0, offset=0, context=0xa27b570) at ft-channel.c:1429 #6 0xb7e19a49 in ?? () from /usr/lib/libtelepathy-glib.so.0 #7 0xb7e122ef in ?? () from /usr/lib/libtelepathy-glib.so.0 #8 0xb7efa17b in ?? () from /usr/lib/libdbus-glib-1.so.2 #9 0xb7ed3695 in ?? () from /lib/libdbus-1.so.3 #10 0xb7ec4dc4 in dbus_connection_dispatch () from /lib/libdbus-1.so.3 #11 0xb7ef7b9d in ?? () from /usr/lib/libdbus-glib-1.so.2 #12 0xb7c014b8 in g_main_dispatch (context=0x9c78df8) at /build/buildd-glib2.0_2.20.5-1-i386-mDnYKw/glib2.0-2.20.5/glib/gmain.c:18---Type <return> to continue, or q <return> to quit--- #13 IA__g_main_context_dispatch (context=0x9c78df8) at /build/buildd-glib2.0_2.20.5-1-i386-mDnYKw/glib2.0-2.20.5/glib/gmain.c:2377 #14 0xb7c04a13 in g_main_context_iterate (context=0x9c78df8, block=1, dispatch=1, self=0x9c73028) at /build/buildd-glib2.0_2.20.5-1-i386-mDnYKw/glib2.0-2.20.5/glib/gmain.c:2455 #15 0xb7c04eda in IA__g_main_loop_run (loop=0x9c77da8) at /build/buildd-glib2.0_2.20.5-1-i386-mDnYKw/glib2.0-2.20.5/glib/gmain.c:2663 #16 0xb7e0fcc0 in tp_run_connection_manager () from /usr/lib/libtelepathy-glib.so.0 #17 0x08056d64 in gabble_main (argc=1, argv=0xbfef7c04) at gabble.c:161 #18 0x08056c8f in main (argc=Cannot access memory at address 0x5e52 $ find /tmp/gabble-ft-* /tmp/gabble-ft-dngDaL /tmp/gabble-ft-mAMOS1 /tmp/gabble-ft-mAMOS1/ft-channel-0x91e5c80 /tmp/gabble-ft-tulEXv /tmp/gabble-ft-tulEXv/ft-channel-0xa20f000 /tmp/gabble-ft-wkbEhs How I reproduce: - Have 2 jabber account in Empathy - Send a file to yourself on another account with Empathy - When the incoming FT offer arrives (the FT icon blinks), do not click - Start d-feet, check the FT channel object path and bus name - Call AcceptFile(0, 0, "", 0) manually on D-Bus. I do that with my Tomboy plugin which does not work yet. It is possible that I copied the wrong object path when I copy/pasted from d-feet, and used the outgoing channel instead of the incoming channel, I am not sure. The code is: if (g_stat (path, &buf) == 0) { /* The file is not supposed to exist */ DEBUG ("file %s already exists", path); g_assert_not_reached (); } And it crashed. dbus-monitor shows: method call sender=:1.2412 -> dest=org.freedesktop.Telepathy.Connection.gabble.jabber.alban_2ecrequy_40collabora_2eco_2euk_2fchocolatine serial=4 path=/org/freedesktop/Telepathy/Connection/gabble/jabber/alban_2ecrequy_40collabora_2eco_2euk_2fchocolatine/FileTransferChannel/0xa20f000; interface=org.freedesktop.Telepathy.Channel.Type.FileTransfer; member=AcceptFile uint32 0 uint32 0 variant string "" uint64 0 And my Tomboy code is: IFTChannel FTChannel = Bus.Session.GetObject<IFTChannel> ("org.freedesktop.Telepathy.Connection.gabble.jabber.alban_2ecrequy_40collabora_2eco_2euk_2fchocolatine", new ObjectPath ("/org/freedesktop/Telepathy/Connection/gabble/jabber/alban_2ecrequy_40collabora_2eco_2euk_2fchocolatine/FileTransferChannel/0xa20f000")); string DummyVariant = ""; object Address = FTChannel.AcceptFile (0, 0, DummyVariant, 0);