Mercurial > pidgin.yaz
view libpurple/tests/check_libpurple.c @ 16577:99bf55ec6ca4
Fix an invalid read that occurs because we were accessing IM data when the
conversation was a chat.
Here's the relevant valgrind output.
==18344== Invalid read of size 4
==18344== at 0x8089DA1: update_typing_icon (gtkconv.c:3138)
==18344== by 0x8090742: pidgin_conv_update_fields (gtkconv.c:6081)
...
==18344== Address 0x107EADD0 is 12 bytes after a block of size 12 alloc'd
==18344== at 0x40056D5: calloc (vg_replace_malloc.c:279)
==18344== by 0x4D48EC4D: g_malloc0 (in /usr/lib/libglib-2.0.so.0.1200.4)
==18344== by 0x809149B: private_gtkconv_new (gtkconv.c:4608)
==18344== by 0x4056637: purple_conversation_new (conversation.c:324)
==18344== by 0x40785EB: serv_got_joined_chat (server.c:699)
==18344== by 0x493C813: irc_msg_join (msgs.c:722)
...
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sat, 28 Apr 2007 05:37:56 +0000 |
parents | 32188b6d2db8 |
children | 743ff8e14b17 |
line wrap: on
line source
#include <glib.h> #include <stdlib.h> #include "../core.h" #include "../eventloop.h" #include "../util.h" #include "tests.h" /****************************************************************************** * libpurple goodies *****************************************************************************/ static guint purple_check_input_add(gint fd, PurpleInputCondition condition, PurpleInputFunction function, gpointer data) { /* this is a no-op for now, feel free to implement it */ return 0; } static PurpleEventLoopUiOps eventloop_ui_ops = { g_timeout_add, (guint (*)(guint))g_source_remove, purple_check_input_add, (guint (*)(guint))g_source_remove, NULL }; static void purple_check_init(void) { gchar *home_dir; purple_eventloop_set_ui_ops(&eventloop_ui_ops); /* build our fake home directory */ home_dir = g_build_path(BUILDDIR, "libpurple", "tests", "home", NULL); purple_util_set_user_dir(home_dir); g_free(home_dir); purple_core_init("check"); } /****************************************************************************** * Check meat and potatoes *****************************************************************************/ Suite* master_suite(void) { Suite *s = suite_create("Master Suite"); return s; } int main(void) { int number_failed; SRunner *sr; /* Make g_return_... functions fatal, ALWAYS. * As this is the test code, this is NOT controlled * by PURPLE_FATAL_ASSERTS. */ g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); sr = srunner_create (master_suite()); srunner_add_suite(sr, cipher_suite()); srunner_add_suite(sr, jabber_jutil_suite()); srunner_add_suite(sr, util_suite()); /* make this a libpurple "ui" */ purple_check_init(); srunner_run_all (sr, CK_NORMAL); number_failed = srunner_ntests_failed (sr); srunner_free (sr); purple_core_quit(); return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; }