1. Enable new mail notification for XMPP (gmail). 2. Have some new mail. 3. Login using pidgin. I get a SIGSEGV. What happens in google.c at line 123 we free the subjects, however i is the number of subjects, so subjects[i] is uninitialized the 1st time through the loop and we free an uninitialized pointer. Also, the way that subjects[i] is assigned to on line 104 is bogus. It allocates a new empty string in case of null, or assigns directly the pointer from the XML structure otherwise. This means that if subject wasn't null, we will free an internal pointer from within the XML structure which xmlnode_free() will attempt to free later as well.
Created attachment 127176 [details] The gdb backtrace. Note that returned_count == 11 and i == 11, so when we try to free we are first dereferencing a pointer to memory we didn't allocate, and then freeing something that wasn't even initialized.
This problem also happens to me.
This crash is known upstream¹ and should be fixed in 2.1.1. As for your second point about line 104, xmlnode_get_data returns a copy of data, not an internal pointer, and it must be g_free'd later. There's nothing wrong there. ¹ http://developer.pidgin.im/ticket/2323
lets mark it upstream then