{
AtkTable *table = (AtkTable *) user_data;
dbus_int32_t row, column;
+ DBusMessage *reply;
DBusError error;
AtkObject *obj;
return droute_invalid_arguments_error (message);
}
obj = atk_table_ref_at (table, row, column);
- return spi_object_return_reference (message, obj, TRUE);
+ reply = spi_object_return_reference (message, obj);
+ g_object_unref (obj);
+
+ return reply;
}
static DBusMessage *
return reply;
}
+static const gchar *
+validate_unallocated_string (const gchar *str)
+{
+ if (!str)
+ return "";
+ if (!g_utf8_validate (str, -1, NULL))
+ {
+ g_warning ("atk-bridge: received bad UTF-8 string from a table function");
+ return "";
+ }
+ return str;
+}
+
static DBusMessage *
impl_GetRowDescription (DBusConnection * bus, DBusMessage * message,
void *user_data)
return droute_invalid_arguments_error (message);
}
description = atk_table_get_row_description (table, row);
- if (!description)
- description = "";
+ description = validate_unallocated_string (description);
reply = dbus_message_new_method_return (message);
if (reply)
{
return droute_invalid_arguments_error (message);
}
description = atk_table_get_column_description (table, column);
- if (!description)
- description = "";
+ description = validate_unallocated_string (description);
reply = dbus_message_new_method_return (message);
if (reply)
{
return droute_invalid_arguments_error (message);
}
obj = atk_table_get_row_header (table, row);
- return spi_object_return_reference (message, obj, FALSE);
+ return spi_object_return_reference (message, obj);
}
static DBusMessage *
return droute_invalid_arguments_error (message);
}
obj = atk_table_get_column_header (table, column);
- return spi_object_return_reference (message, obj, FALSE);
+ return spi_object_return_reference (message, obj);
}
static DBusMessage *