Mercurial > pidgin
view libgaim/pluginpref.c @ 14357:4e14503b9bac
[gaim-migrate @ 17063]
Fix an assertion that fails for me about half the time
when I try to sign onto MSN.
Here's a backtrace, in case someone wants to look at this
more in depth:
#4 0x00002aaab203d857 in msn_object_new_from_string (str=0x2aaaac4f0860 "0")
at object.c:79
obj = (MsnObject *) 0x7fff2bc6efe0
tag = 0x2aaaac4f0861 ""
c = 0x100000001 <Address 0x100000001 out of bounds>
__PRETTY_FUNCTION__ = "msn_object_new_from_string"
#5 0x00002aaab203bf37 in nln_cmd (cmdproc=0xd84f30, cmd=0xcb1e10)
at notification.c:687
session = (MsnSession *) 0xd72e70
account = (GaimAccount *) 0x63c020
gc = (GaimConnection *) 0xd5d9b0
user = (MsnUser *) 0xcb1d90
msnobj = (MsnObject *) 0x2aaaacc127d9
clientid = 32767
state = 0xc97820 "NLN"
passport = 0xd65310 "lbdash@yahoo.com"
friendly = 0x2aaaac4f0860 "0"
#6 0x00002aaab202ff18 in msn_cmdproc_process_cmd (cmdproc=0xd84f30,
cmd=0xcb1e10) at cmdproc.c:313
cb = 0x2aaab203be63 <nln_cmd>
trans = (MsnTransaction *) 0x0
#7 0x00002aaab202ffbe in msn_cmdproc_process_cmd_text (cmdproc=0xd84f30,
command=0xe082b0 "NLN NLN lbdash@yahoo.com lbdash@yahoo.com 1073741856 0")
at cmdproc.c:335
No locals.
#8 0x00002aaab2032c06 in read_cb (data=0xd4e600, source=7,
cond=GAIM_INPUT_READ) at httpconn.c:380
httpconn = (MsnHttpConn *) 0xd4e600
servconn = (MsnServConn *) 0xd65360
session = (MsnSession *) 0xd72e70
buf = "HTTP/1.1 200 OK\r\nDate: Sun, 27 Aug 2006 21:29:58 GMT\r\nServer:
Microsoft-IIS/6.0\r\nX-Powered-By: ASP.N ET\r\nX-MSN-Messenger:
SessionID=26246177.8760; GW-IP=207.46.7.4\r\nContent-Length: 56\r\nContent-type:
ap"...
cur = 0xe082b0 "NLN NLN lbdash@yahoo.com lbdash@yahoo.com 1073741856 0"
end = 0xe082e8 ""
old_rx_buf = 0xe082b0 "NLN NLN lbdash@yahoo.com lbdash@yahoo.com
1073741856 0"
len = 285
cur_len = 56
result_msg = 0xe082b0 "NLN NLN lbdash@yahoo.com lbdash@yahoo.com
1073741856 0"
result_len = 56
error = 0
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 27 Aug 2006 21:36:52 +0000 |
parents | 60b1bc8dbf37 |
children |
line wrap: on
line source
/** * gaim * * Gaim is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <glib.h> #include "debug.h" #include "internal.h" #include "pluginpref.h" #include "prefs.h" struct _GaimPluginPrefFrame { GList *prefs; }; struct _GaimPluginPref { char *name; char *label; GaimPluginPrefType type; int min; int max; GList *choices; unsigned int max_length; gboolean masked; GaimStringFormatType format; }; GaimPluginPrefFrame * gaim_plugin_pref_frame_new() { GaimPluginPrefFrame *frame; frame = g_new0(GaimPluginPrefFrame, 1); return frame; } void gaim_plugin_pref_frame_destroy(GaimPluginPrefFrame *frame) { g_return_if_fail(frame != NULL); g_list_foreach(frame->prefs, (GFunc)gaim_plugin_pref_destroy, NULL); g_list_free(frame->prefs); g_free(frame); } void gaim_plugin_pref_frame_add(GaimPluginPrefFrame *frame, GaimPluginPref *pref) { g_return_if_fail(frame != NULL); g_return_if_fail(pref != NULL); frame->prefs = g_list_append(frame->prefs, pref); } GList * gaim_plugin_pref_frame_get_prefs(GaimPluginPrefFrame *frame) { g_return_val_if_fail(frame != NULL, NULL); g_return_val_if_fail(frame->prefs != NULL, NULL); return frame->prefs; } GaimPluginPref * gaim_plugin_pref_new() { GaimPluginPref *pref; pref = g_new0(GaimPluginPref, 1); return pref; } GaimPluginPref * gaim_plugin_pref_new_with_name(const char *name) { GaimPluginPref *pref; g_return_val_if_fail(name != NULL, NULL); pref = g_new0(GaimPluginPref, 1); pref->name = g_strdup(name); return pref; } GaimPluginPref * gaim_plugin_pref_new_with_label(const char *label) { GaimPluginPref *pref; g_return_val_if_fail(label != NULL, NULL); pref = g_new0(GaimPluginPref, 1); pref->label = g_strdup(label); return pref; } GaimPluginPref * gaim_plugin_pref_new_with_name_and_label(const char *name, const char *label) { GaimPluginPref *pref; g_return_val_if_fail(name != NULL, NULL); g_return_val_if_fail(label != NULL, NULL); pref = g_new0(GaimPluginPref, 1); pref->name = g_strdup(name); pref->label = g_strdup(label); return pref; } void gaim_plugin_pref_destroy(GaimPluginPref *pref) { g_return_if_fail(pref != NULL); g_free(pref->name); g_free(pref->label); g_list_free(pref->choices); g_free(pref); } void gaim_plugin_pref_set_name(GaimPluginPref *pref, const char *name) { g_return_if_fail(pref != NULL); g_return_if_fail(name != NULL); g_free(pref->name); pref->name = g_strdup(name); } const char * gaim_plugin_pref_get_name(GaimPluginPref *pref) { g_return_val_if_fail(pref != NULL, NULL); return pref->name; } void gaim_plugin_pref_set_label(GaimPluginPref *pref, const char *label) { g_return_if_fail(pref != NULL); g_return_if_fail(label != NULL); g_free(pref->label); pref->label = g_strdup(label); } const char * gaim_plugin_pref_get_label(GaimPluginPref *pref) { g_return_val_if_fail(pref != NULL, NULL); return pref->label; } void gaim_plugin_pref_set_bounds(GaimPluginPref *pref, int min, int max) { int tmp; g_return_if_fail(pref != NULL); g_return_if_fail(pref->name != NULL); if (gaim_prefs_get_type(pref->name) != GAIM_PREF_INT) { gaim_debug_info("pluginpref", "gaim_plugin_pref_set_bounds: %s is not an integer pref\n", pref->name); return; } if (min > max) { tmp = min; min = max; max = tmp; } pref->min = min; pref->max = max; } void gaim_plugin_pref_get_bounds(GaimPluginPref *pref, int *min, int *max) { g_return_if_fail(pref != NULL); g_return_if_fail(pref->name != NULL); if (gaim_prefs_get_type(pref->name) != GAIM_PREF_INT) { gaim_debug(GAIM_DEBUG_INFO, "pluginpref", "gaim_plugin_pref_get_bounds: %s is not an integer pref\n", pref->name); return; } *min = pref->min; *max = pref->max; } void gaim_plugin_pref_set_type(GaimPluginPref *pref, GaimPluginPrefType type) { g_return_if_fail(pref != NULL); pref->type = type; } GaimPluginPrefType gaim_plugin_pref_get_type(GaimPluginPref *pref) { g_return_val_if_fail(pref != NULL, GAIM_PLUGIN_PREF_NONE); return pref->type; } void gaim_plugin_pref_add_choice(GaimPluginPref *pref, const char *label, gpointer choice) { g_return_if_fail(pref != NULL); g_return_if_fail(label != NULL); g_return_if_fail(choice || gaim_prefs_get_type(pref->name) == GAIM_PREF_INT); pref->choices = g_list_append(pref->choices, (gpointer)label); pref->choices = g_list_append(pref->choices, choice); } GList * gaim_plugin_pref_get_choices(GaimPluginPref *pref) { g_return_val_if_fail(pref != NULL, NULL); return pref->choices; } void gaim_plugin_pref_set_max_length(GaimPluginPref *pref, unsigned int max_length) { g_return_if_fail(pref != NULL); pref->max_length = max_length; } unsigned int gaim_plugin_pref_get_max_length(GaimPluginPref *pref) { g_return_val_if_fail(pref != NULL, 0); return pref->max_length; } void gaim_plugin_pref_set_masked(GaimPluginPref *pref, gboolean masked) { g_return_if_fail(pref != NULL); pref->masked = masked; } gboolean gaim_plugin_pref_get_masked(GaimPluginPref *pref) { g_return_val_if_fail(pref != NULL, FALSE); return pref->masked; } void gaim_plugin_pref_set_format_type(GaimPluginPref *pref, GaimStringFormatType format) { g_return_if_fail(pref != NULL); g_return_if_fail(pref->type == GAIM_PLUGIN_PREF_STRING_FORMAT); pref->format = format; } GaimStringFormatType gaim_plugin_pref_get_format_type(GaimPluginPref *pref) { g_return_val_if_fail(pref != NULL, 0); if (pref->type != GAIM_PLUGIN_PREF_STRING_FORMAT) return GAIM_STRING_FORMAT_TYPE_NONE; return pref->format; }