[Pidgin] #2036: msimprpl sometimes crashes in purple_debug_vargs on Windows

Pidgin trac at pidgin.im
Thu Jul 5 02:03:36 EDT 2007


#2036: msimprpl sometimes crashes in purple_debug_vargs on Windows
-----------------------+----------------------------------------------------
 Reporter:  jeff       |       Owner:  jeff 
     Type:  defect     |      Status:  new  
 Priority:  minor      |   Milestone:       
Component:  libpurple  |     Version:  2.0.2
 Keywords:  msimprpl   |     Pending:  0    
-----------------------+----------------------------------------------------
 Check to make sure that nothing invalid is passed to purple_debug_info().

 {{{
 pidgin.exe caused an Access Violation at location 77c478c0 in module
 msvcrt.dll Reading from location 00000000.

 Registers:
 eax=00000000 ebx=00000000 ecx=00000000 edx=00000006 esi=00000002
 edi=00000000
 eip=77c478c0 esp=0022f02c ebp=0022f3a8 iopl=0         nv up ei pl zr na po
 nc
 cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
 efl=00200246

 Call stack:
 77C478C0  msvcrt.dll:77C478C0  strlen
 6730D487  libglib-2.0-0.dll:6730D487  g_win32_locale_filename_from_utf8
 67304B24  libglib-2.0-0.dll:67304B24  g_vasprintf
 672F4AD6  libglib-2.0-0.dll:672F4AD6  g_strdup_vprintf
 67CD928F  libpurple.dll:67CD928F  purple_debug_vargs  debug.c:60
 static void purple_debug_vargs(
         PurpleDebugLevel level = ,
         const char * category = &'n',
         const char * format = &'s',
         va_list args = "°4¿"
 )
         ...
         return;

 >       arg_s = g_strdup_vprintf(format, args);

         if (debug_enabled) {
         ...

 67CD9474  libpurple.dll:67CD9474  purple_debug_info  debug.c:121
 void purple_debug_info(
         const char * category = &'n',
         const char * format = &'s'
 )
         ...
         purple_debug_vargs(PURPLE_DEBUG_INFO, category, format, args);
         va_end(args);
 >       }

         void
         ...

 6C7822B3  libnull.dll:6C7822B3  nullprpl_set_status  nullprpl.c:541
 static void nullprpl_set_status(
         PurpleAccount * acct = &(indirect),
         PurpleStatus * status = &(indirect)
 )
         ...
                             acct->username,
 purple_status_get_name(status), msg);

 >         foreach_nullprpl_gc(report_status_change,
 get_nullprpl_gc(acct->username),
                               NULL);
         }
         ...

 67CF01D5  libpurple.dll:67CF01D5  purple_prpl_change_account_status
 prpl.c:240
 void purple_prpl_change_account_status(
         PurpleAccount * account = &{
                 char * username = 0x00bf34b0,
                 char * alias = 0x00000000,
                 char * password = 0x00000000,
                 char * user_info = 0x00000000,
                 char * buddy_icon_path = 0x00000000,
                 gboolean remember_pass = 0,
                 char * protocol_id = 0x00bf35d8,
                 PurpleConnection * gc = 0x01dd7e20,
                 gboolean disconnecting = 0,
                 GHashTable * settings = 0x00bd3bc0,
                 GHashTable * ui_settings = 0x00bd3be0,
                 PurpleProxyInfo * proxy_info = 0x00000000,
                 GSList * permit = 0x00000000,
                 GSList * deny = 0x00000000,
                 int perm_deny = 1,
                 GList * status_types = 0x00bde670,
                 PurplePresence * presence = 0x00bf2ee8,
                 PurpleLog * system_log = 0x00000000,
                 void * ui_data = 0x00000000
         },
         PurpleStatus * old_status = &(indirect),
         PurpleStatus * new_status = &(indirect)
 )
         ...
         if (!purple_account_is_disconnected(account) &&
 prpl_info->set_status != NULL)
         {
 >       prpl_info->set_status(account, new_status);
         }
         }
         ...

 67CF9CDA  libpurple.dll:67CF9CDA  purple_status_set_active_with_attrs_list
 status.c:651
 void purple_status_set_active_with_attrs_list(
         PurpleStatus * status = &(indirect),
         gboolean active = 1,
         const GList * attrs = &(indirect)
 )
         ...

         if (purple_account_get_enabled(account, purple_core_get_ui()))
 >       purple_prpl_change_account_status(account, old_status,
 new_status);

         if (ops != NULL && ops->status_changed != NULL)
         ...

 67CC3EE0  libpurple.dll:67CC3EE0  purple_account_set_status_list
 account.c:1491
 void purple_account_set_status_list(
         PurpleAccount * account = &(indirect),
         const char * status_id = &'o',
         gboolean active = 1,
         GList * attrs = &(indirect)
 )
         ...
          */
         schedule_accounts_save();
 >       }

         void
         ...

 67CC3FFA  libpurple.dll:67CC3FFA  purple_account_set_status
 account.c:1460
 void purple_account_set_status(
         PurpleAccount * account = &(indirect),
         const char * status_id = &'o',
         gboolean active = 1
 )
         ...
         }
         purple_account_set_status_list(account, status_id, active, attrs);
 >       g_list_free(attrs);
         va_end(args);
         }
         ...

 67CF468B  libpurple.dll:67CF468B  purple_savedstatus_activate_for_account
 savedstatuses.c:1134
 void purple_savedstatus_activate_for_account(
         const PurpleSavedStatus * saved_status = &(indirect),
         PurpleAccount * account = &{
                 char * username = 0x00bf34b0,
                 char * alias = 0x00000000,
                 char * password = 0x00000000,
                 char * user_info = 0x00000000,
                 char * buddy_icon_path = 0x00000000,
                 gboolean remember_pass = 0,
                 char * protocol_id = 0x00bf35d8,
                 PurpleConnection * gc = 0x01dd7e20,
                 gboolean disconnecting = 0,
                 GHashTable * settings = 0x00bd3bc0,
                 GHashTable * ui_settings = 0x00bd3be0,
                 PurpleProxyInfo * proxy_info = 0x00000000,
                 GSList * permit = 0x00000000,
                 GSList * deny = 0x00000000,
                 int perm_deny = 1,
                 GList * status_types = 0x00bde670,
                 PurplePresence * presence = 0x00bf2ee8,
                 PurpleLog * system_log = 0x00000000,
                 void * ui_data = 0x00000000
         }
 )
         ...
         TRUE, NULL);
         }
 >       }

         void *
         ...

 67CF48E1  libpurple.dll:67CF48E1  purple_savedstatus_activate
 savedstatuses.c:1081
 void purple_savedstatus_activate(
         PurpleSavedStatus * saved_status = &(indirect)
 )
         ...

         accounts = purple_accounts_get_all_active();
 >       for (node = accounts; node != NULL; node = node->next)
         {
         PurpleAccount *account;
         ...

 64AA9D2E  pidgin.dll:64AA9D2E  activate_currently_selected_status
 gtkstatusbox.c:2318
 static void activate_currently_selected_status(
         PidginStatusBox * status_box = &{
                 GtkContainer parent_instance = (indirect),
                 GtkListStore * store = 0x00c73d00,
                 GtkListStore * dropdown_store = 0x00c73d40,
                 PurpleAccount * account = 0x00000000,
                 PurpleAccount * token_status_account = 0x00000000,
                 GtkWidget * vbox = 0x00bd56f8,
                 GtkWidget * sw = 0x01cdb960,
                 GtkWidget * imhtml = 0x01cf5008,
                 PurpleStoredImage * buddy_icon_img = 0x00000000,
                 GdkPixbuf * buddy_icon = 0x01ce6e38,
                 GdkPixbuf * buddy_icon_hover = 0x01ce6e00,
                 GtkWidget * buddy_icon_sel = 0x00000000,
                 GtkWidget * icon = 0x01cdbb00,
                 GtkWidget * icon_box = 0x00bd57e8,
                 GtkWidget * icon_box_menu = 0x00000000,
                 GdkCursor * hand_cursor = 0x01da7ea8,
                 GdkCursor * arrow_cursor = 0x01d96bc0,
                 int icon_size = 32,
                 gboolean icon_opaque = 0,
                 gboolean imhtml_visible = 0,
                 GtkWidget * cell_view = 0x00c71df8,
                 GtkCellRenderer * icon_rend = 0x00c71f78,
                 GtkCellRenderer * text_rend = 0x01cdf310,
                 GdkPixbuf * error_pixbuf = 0x00000000,
                 int connecting_index = 6,
                 GdkPixbuf *uint32[] connecting_pixbufs = (array),
                 int typing_index = 0,
                 GdkPixbuf *uint32[] typing_pixbufs = (array),
                 gboolean network_available = 1,
                 gboolean connecting = 1,
                 guint typing = 0,
                 GtkTreeIter iter = (indirect),
                 char * error = 0x00000000,
                 GtkWidget * hbox = 0x00bd55b8,
                 GtkWidget * toggle_button = 0x00c703e0,
                 GtkWidget * vsep = 0x00c73cc0,
                 GtkWidget * arrow = 0x00bd5608,
                 GtkWidget * popup_window = 0x00c06758,
                 GtkWidget * popup_frame = 0x01cdb890,
                 GtkWidget * scrolled_window = 0x00c71f18,
                 GtkWidget * cell_view_frame = 0x00000000,
                 GtkTreeViewColumn * column = 0x00c0b158,
                 GtkWidget * tree_view = 0x01ce41d8,
                 gboolean popup_in_progress = 0,
                 GtkTreeRowReference * active_row = 0x01d92a58
         }
 )
         ...
         }

 >       g_free(title);
         g_free(message);
         }
         ...

 64AAA5A7  pidgin.dll:64AAA5A7  remove_typing_cb  gtkstatusbox.c:2381
 static void remove_typing_cb(
         PidginStatusBox * status_box = &{
                 GtkContainer parent_instance = (indirect),
                 GtkListStore * store = 0x00c73d00,
                 GtkListStore * dropdown_store = 0x00c73d40,
                 PurpleAccount * account = 0x00000000,
                 PurpleAccount * token_status_account = 0x00000000,
                 GtkWidget * vbox = 0x00bd56f8,
                 GtkWidget * sw = 0x01cdb960,
                 GtkWidget * imhtml = 0x01cf5008,
                 PurpleStoredImage * buddy_icon_img = 0x00000000,
                 GdkPixbuf * buddy_icon = 0x01ce6e38,
                 GdkPixbuf * buddy_icon_hover = 0x01ce6e00,
                 GtkWidget * buddy_icon_sel = 0x00000000,
                 GtkWidget * icon = 0x01cdbb00,
                 GtkWidget * icon_box = 0x00bd57e8,
                 GtkWidget * icon_box_menu = 0x00000000,
                 GdkCursor * hand_cursor = 0x01da7ea8,
                 GdkCursor * arrow_cursor = 0x01d96bc0,
                 int icon_size = 32,
                 gboolean icon_opaque = 0,
                 gboolean imhtml_visible = 0,
                 GtkWidget * cell_view = 0x00c71df8,
                 GtkCellRenderer * icon_rend = 0x00c71f78,
                 GtkCellRenderer * text_rend = 0x01cdf310,
                 GdkPixbuf * error_pixbuf = 0x00000000,
                 int connecting_index = 6,
                 GdkPixbuf *uint32[] connecting_pixbufs = (array),
                 int typing_index = 0,
                 GdkPixbuf *uint32[] typing_pixbufs = (array),
                 gboolean network_available = 1,
                 gboolean connecting = 1,
                 guint typing = 0,
                 GtkTreeIter iter = (indirect),
                 char * error = 0x00000000,
                 GtkWidget * hbox = 0x00bd55b8,
                 GtkWidget * toggle_button = 0x00c703e0,
                 GtkWidget * vsep = 0x00c73cc0,
                 GtkWidget * arrow = 0x00bd5608,
                 GtkWidget * popup_window = 0x00c06758,
                 GtkWidget * popup_frame = 0x01cdb890,
                 GtkWidget * scrolled_window = 0x00c71f18,
                 GtkWidget * cell_view_frame = 0x00000000,
                 GtkTreeViewColumn * column = 0x00c0b158,
                 GtkWidget * tree_view = 0x01ce41d8,
                 gboolean popup_in_progress = 0,
                 GtkTreeRowReference * active_row = 0x01d92a58
         }
 )
         ...

         activate_currently_selected_status(status_box);
 >       pidgin_status_box_refresh(status_box);
         }

         ...

 672E0C46  libglib-2.0-0.dll:672E0C46  g_main_context_is_owner
 672DEA27  libglib-2.0-0.dll:672DEA27  g_main_context_dispatch
 672DFEFB  libglib-2.0-0.dll:672DFEFB  g_main_context_acquire
 672E00DA  libglib-2.0-0.dll:672E00DA  g_main_loop_run
 60575D4E  libgtk-win32-2.0-0.dll:60575D4E  gtk_main
 64A87C0C  pidgin.dll:64A87C0C  pidgin_main  gtkmain.c:849
 int pidgin_main(
         HINSTANCE hint = &{
                 int i = 9460301
         },
         int argc = 2,
         char * * argv = &0x003d37a5
 )
         ...

         #ifdef _WIN32
 >       winpidgin_cleanup();
         #endif

         ...

 00401CD8  pidgin.exe:00401CD8  WinMain  winpidgin.c:614
 int WinMain(
         struct HINSTANCE__ * hInstance = &{
                 int i = 9460301
         },
         struct HINSTANCE__ * hPrevInstance = &{
                 int i =
         },
         char * lpszCmdLine = "-d",
         int nCmdShow = 10
 )
         ...
         }

 >       return pidgin_main(hInstance, __argc, __argv);
         }

         ...

 004022DA  pidgin.exe:004022DA  WinMain  winpidgin.c:240
 int WinMain(
         struct HINSTANCE__ * hInstance = &{
                 int i =
         },
         struct HINSTANCE__ * hPrevInstance = &{
                 int i = 4011941
         },
         char * lpszCmdLine = "list:  Display a list of chat rooms on the
 network. <i>Warning, some servers may disconnect you upon doing
 this.</i>",
         int nCmdShow = 4214784
 )
         ...
         sizeof(DWORD)
         ) != ERROR_SUCCESS)
 >       printf("Error writing SafeDllSearchMode. Error: %u\n",
         (UINT) GetLastError());
         RegCloseKey(hkey);
         ...

 00401247  pidgin.exe:00401247
 004012B8  pidgin.exe:004012B8
 7C816FD7  kernel32.dll:7C816FD7  RegisterWaitForInputIdle
 }}}

-- 
Ticket URL: <http://developer.pidgin.im/ticket/2036>
Pidgin <http://pidgin.im>
Pidgin


More information about the Tracker mailing list