Mercurial > pidgin
comparison libgaim/prefs.c @ 15023:dd4160b36f80
[gaim-migrate @ 17805]
Don't allow invalid plugin callbacks to registered (and eventually crash).
Fix an unlikely leak.
committer: Tailor Script <tailor@pidgin.im>
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Wed, 22 Nov 2006 00:43:42 +0000 |
parents | 71149a751439 |
children | 40746bedd9a8 |
comparison
equal
deleted
inserted
replaced
15022:2d3c7f76cea0 | 15023:dd4160b36f80 |
---|---|
615 | 615 |
616 static void | 616 static void |
617 remove_pref(struct gaim_pref *pref) | 617 remove_pref(struct gaim_pref *pref) |
618 { | 618 { |
619 char *name; | 619 char *name; |
620 GSList *l; | |
620 | 621 |
621 if(!pref || pref == &prefs) | 622 if(!pref || pref == &prefs) |
622 return; | 623 return; |
623 | 624 |
624 while(pref->first_child) | 625 while(pref->first_child) |
641 g_hash_table_remove(prefs_hash, name); | 642 g_hash_table_remove(prefs_hash, name); |
642 g_free(name); | 643 g_free(name); |
643 | 644 |
644 free_pref_value(pref); | 645 free_pref_value(pref); |
645 | 646 |
646 g_slist_free(pref->callbacks); | 647 while((l = pref->callbacks) != NULL) { |
648 pref->callbacks = pref->callbacks->next; | |
649 g_free(l->data); | |
650 g_slist_free_1(l); | |
651 } | |
647 g_free(pref->name); | 652 g_free(pref->name); |
648 g_free(pref); | 653 g_free(pref); |
649 } | 654 } |
650 | 655 |
651 void | 656 void |
1005 gaim_prefs_connect_callback(void *handle, const char *name, GaimPrefCallback func, gpointer data) | 1010 gaim_prefs_connect_callback(void *handle, const char *name, GaimPrefCallback func, gpointer data) |
1006 { | 1011 { |
1007 struct gaim_pref *pref; | 1012 struct gaim_pref *pref; |
1008 struct pref_cb *cb; | 1013 struct pref_cb *cb; |
1009 static guint cb_id = 0; | 1014 static guint cb_id = 0; |
1015 | |
1016 g_return_val_if_fail(name != NULL, 0); | |
1017 g_return_val_if_fail(func != NULL, 0); | |
1010 | 1018 |
1011 pref = find_pref(name); | 1019 pref = find_pref(name); |
1012 if (pref == NULL) | 1020 if (pref == NULL) |
1013 return 0; | 1021 return 0; |
1014 | 1022 |