Bug 23903 - Gabble crashes in File Transfer
Summary: Gabble crashes in File Transfer
Status: RESOLVED FIXED
Alias: None
Product: Telepathy
Classification: Unclassified
Component: gabble (show other bugs)
Version: unspecified
Hardware: Other All
: medium normal
Assignee: Telepathy bugs list
QA Contact: Telepathy bugs list
URL: http://git.collabora.co.uk/?p=user/ca...
Whiteboard:
Keywords: patch
Depends on:
Blocks:
 
Reported: 2009-09-13 10:35 UTC by Alban Crequy
Modified: 2009-09-14 05:10 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments

Description Alban Crequy 2009-09-13 10:35:41 UTC
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);
Comment 1 Alban Crequy 2009-09-13 11:49:15 UTC
- 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)

Comment 2 Guillaume Desmottes 2009-09-14 03:49:23 UTC
(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?
Comment 4 Guillaume Desmottes 2009-09-14 05:10:39 UTC
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.