Don't parse non-existing arguments
authorBenjamin Otte <otte@redhat.com>
Thu, 18 Dec 2014 20:45:36 +0000 (21:45 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 18 Dec 2014 23:18:16 +0000 (00:18 +0100)
The definition of the signal declares 0 arguments, so the listener can't
assume there are any.

Found by Michael Stahl via this valgrind snippet:

==4770== Conditional jump or move depends on uninitialised value(s)
==4770==    at 0x3104C10812: text_selection_changed_event_listener
(event.c:1036)
==4770==    by 0x30EF42160A: signal_emit_unlocked_R (gsignal.c:3519)
==4770==    by 0x30EF42A180: g_signal_emit_valist (gsignal.c:3309)
==4770==    by 0x30EF42A8F9: g_signal_emit_by_name (gsignal.c:3405)
==4770==    by 0x1835EE96:
AtkListener::notifyEvent(com::sun::star::accessibility::AccessibleEventObject
const&) (atklistener.cxx:454)
==4770==    by 0x56E46BA:
comphelper::AccessibleEventNotifier::addEvent(unsigned int,

https://bugzilla.gnome.org/show_bug.cgi?id=741734

atk-adaptor/event.c

index dbfa9dc62877e86ad63f555aabecee1a635a91f4..d1652da98b26544ee4ba31d475187d250e621c01 100644 (file)
@@ -1025,7 +1025,6 @@ text_selection_changed_event_listener (GSignalInvocationHint * signal_hint,
   AtkObject *accessible;
   GSignalQuery signal_query;
   const gchar *name, *minor;
-  gint detail1 = 0, detail2 = 0;
 
   g_signal_query (signal_hint->signal_id, &signal_query);
   name = signal_query.signal_name;
@@ -1033,13 +1032,7 @@ text_selection_changed_event_listener (GSignalInvocationHint * signal_hint,
   accessible = ATK_OBJECT (g_value_get_object (&param_values[0]));
   minor = g_quark_to_string (signal_hint->detail);
 
-  if (G_VALUE_TYPE (&param_values[1]) == G_TYPE_INT)
-    detail1 = g_value_get_int (&param_values[1]);
-
-  if (G_VALUE_TYPE (&param_values[2]) == G_TYPE_INT)
-    detail2 = g_value_get_int (&param_values[2]);
-
-  emit_event (accessible, ITF_EVENT_OBJECT, name, minor, detail1, detail2,
+  emit_event (accessible, ITF_EVENT_OBJECT, name, minor, 0, 0,
               DBUS_TYPE_STRING_AS_STRING, "", append_basic);
   return TRUE;
 }