Mercurial > pidgin.yaz
view pidgin/plugins/pidgininc.c @ 24420:caf82c1cebf2
I've seen this crash a few times where cmd->param_count is 4 and
we try to access params[4] which is invalid.
The backtrace is:
#0 0x0000003c4c4341ca in ____strtoll_l_internal () from /lib64/libc.so.6
#1 0x0000003c4c431ab2 in atoi () from /lib64/libc.so.6
#2 0x00000000005f0abe in ubm_cmd (cmdproc=0xc86eb30, cmd=0xc832e00) at notification.c:494
#3 0x00000000005efef1 in msn_cmdproc_process_cmd (cmdproc=0xc86eb30, cmd=0xc832e00)
at cmdproc.c:321
#4 0x00000000005eff97 in msn_cmdproc_process_cmd_text (cmdproc=0xc86eb30,
command=0xcadb390 "UBM somebody1@yahoo.com 32 1 170") at cmdproc.c:343
#5 0x00000000005f9d8f in read_cb (data=0xc86ea90, source=9, cond=PURPLE_INPUT_READ)
at servconn.c:439
#6 0x00000000004db70c in pidgin_io_invoke (source=0xc8369f0, condition=G_IO_IN, data=0xc836570)
at gtkeventloop.cc:79
Here are some other values I've seen for command in frame 4:
UBM somebody1@yahoo.com 32 1 170
UBM somebody2@yahoo.com 32 2 91
UBM somebody3@yahoo.com 32 2 93
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 18 Nov 2008 07:16:49 +0000 |
parents | 3cc856ca2338 |
children | a439f24713c8 eebd46227f50 |
line wrap: on
line source
#include "internal.h" #include "plugin.h" #include "account.h" #include "connection.h" #include "conversation.h" #include "version.h" /* include UI for pidgindialogs_about() */ #include "gtkplugin.h" #include "gtkdialogs.h" #define PURPLEINC_PLUGIN_ID "core-purpleinc" static void echo_hi(PurpleConnection *gc) { /* this doesn't do much, just lets you know who we are :) */ pidgindialogs_about(); } static gboolean reverse(PurpleAccount *account, char **who, char **message, PurpleConversation *conv, int *flags) { /* this will drive you insane. whenever you receive a message, * the text of the message (HTML and all) will be reversed. */ int i, l; char tmp; /* this check is necessary in case bad plugins do bad things */ if (message == NULL || *message == NULL) return FALSE; l = strlen(*message); if (!strcmp(*who, purple_account_get_username(account))) return FALSE; for (i = 0; i < l/2; i++) { tmp = (*message)[i]; (*message)[i] = (*message)[l - i - 1]; (*message)[l - i - 1] = tmp; } return FALSE; } static void bud(PurpleBuddy *who) { PurpleAccount *acct = who->account; PurpleConversation *conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, acct, who->name); purple_conv_im_send(PURPLE_CONV_IM(conv), "Hello!"); } /* * EXPORTED FUNCTIONS */ static gboolean plugin_load(PurplePlugin *plugin) { /* this is for doing something fun when we sign on */ purple_signal_connect(purple_connections_get_handle(), "signed-on", plugin, PURPLE_CALLBACK(echo_hi), NULL); /* this is for doing something fun when we get a message */ purple_signal_connect(purple_conversations_get_handle(), "receiving-im-msg", plugin, PURPLE_CALLBACK(reverse), NULL); /* this is for doing something fun when a buddy comes online */ purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", plugin, PURPLE_CALLBACK(bud), NULL); return TRUE; } static PurplePluginInfo info = { PURPLE_PLUGIN_MAGIC, PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION, PURPLE_PLUGIN_STANDARD, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */ NULL, /**< dependencies */ PURPLE_PRIORITY_DEFAULT, /**< priority */ PURPLEINC_PLUGIN_ID, /**< id */ N_("Pidgin Demonstration Plugin"), /**< name */ DISPLAY_VERSION, /**< version */ /** summary */ N_("An example plugin that does stuff - see the description."), /** description */ N_("This is a really cool plugin that does a lot of stuff:\n" "- It tells you who wrote the program when you log in\n" "- It reverses all incoming text\n" "- It sends a message to people on your list immediately" " when they sign on"), "Eric Warmenhoven <eric@warmenhoven.org>", /**< author */ PURPLE_WEBSITE, /**< homepage */ plugin_load, /**< load */ NULL, /**< unload */ NULL, /**< destroy */ NULL, /**< ui_info */ NULL, /**< extra_info */ NULL, /**< prefs_info */ NULL /**< actions */ }; static void init_plugin(PurplePlugin *plugin) { } PURPLE_INIT_PLUGIN(purpleinc, init_plugin, info)