elementary: atspi - fix dbus abort
authorShinwoo Kim <cinoo.kim@samsung.com>
Thu, 28 Sep 2017 11:08:25 +0000 (20:08 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Thu, 28 Sep 2017 11:29:33 +0000 (20:29 +0900)
This patch set fix following abort occured on dbus side.

(gdb) bt
0   __GI_raise (sig=sig@entry=6)
1   __GI_abort ()
2   _dbus_abort ()
3   _dbus_warn_check_failed
4   dbus_message_iter_append_basic
5   append_basic
6   eldbus_message_iter_basic_append
7   _bridge_signal_send
8   _text_text_removed_send
9   _bridge_accessible_event_dispatch
10  _elm_interface_atspi_accessible_event_emit
11  elm_interface_atspi_accessible_event_emit
12  _entry_changed_user_signal_cb

(gdb) f 12
(gdb) p *$1
$2 = {change = {insert = {content = 0x0, pos = 0, plain_length = 1},
                del = {content = 0x0, start = 0, end = 1}},
      insert = 0 '\000', merge = 0 '\000'}

The following patch set would fix the root cause of this problem.
https://phab.enlightenment.org/D5240

src/lib/elementary/elm_atspi_bridge.c

index 09247fd..1cb104a 100644 (file)
@@ -4135,6 +4135,12 @@ _text_text_inserted_send(void *data, const Efl_Event *event)
    if (!STATE_TYPE_GET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_TEXT_CHANGED))
      return;
 
+   if (!info->content)
+     {
+        WRN("Try to send signal with NULL value");
+        return;
+     }
+
    _bridge_signal_send(data, event->object, ATSPI_DBUS_INTERFACE_EVENT_OBJECT,
                        &_event_obj_signals[ATSPI_OBJECT_EVENT_TEXT_CHANGED], "insert", info->pos, info->len, "s", info->content);
 }
@@ -4149,6 +4155,12 @@ _text_text_removed_send(void *data, const Efl_Event *event)
    if (!STATE_TYPE_GET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_TEXT_CHANGED))
      return;
 
+   if (!info->content)
+     {
+        WRN("Try to send signal with NULL value");
+        return;
+     }
+
    _bridge_signal_send(data, event->object, ATSPI_DBUS_INTERFACE_EVENT_OBJECT,
                        &_event_obj_signals[ATSPI_OBJECT_EVENT_TEXT_CHANGED], "delete", info->pos, info->len, "s", info->content);
 }