EionRobb / purple-discord

A libpurple/Pidgin plugin for Discord
GNU General Public License v3.0
381 stars 43 forks source link

Crash in discord_free_guild_membership on a reconnect #392

Closed bodqhrohro closed 2 years ago

bodqhrohro commented 2 years ago
Thread 1 "pidgin" received signal SIGSEGV, Segmentation fault.
dns[295069]: nobody needs me... =(
dns[295100]: nobody needs me... =(
0x00007ffff0d5bd45 in discord_free_guild_membership (data=0x5) at libdiscord.c:415
415     g_free(guild_membership->nick);
@(gdb) bt
#0  0x00007ffff0d5bd45 in discord_free_guild_membership (data=0x5) at libdiscord.c:415
#1  0x00007ffff72e1db2 in g_hash_table_remove_all_nodes
    (hash_table=hash_table@entry=0x55555fbd4400, notify=notify@entry=1, destruction=destruction@entry=1) at ../../../glib/ghash.c:706
#2  0x00007ffff72e28ef in g_hash_table_remove_all_nodes (destruction=1, notify=1, hash_table=0x55555fbd4400) at ../../../glib/ghash.c:628
#3  g_hash_table_unref (hash_table=0x55555fbd4400) at ../../../glib/ghash.c:1461
#4  g_hash_table_unref (hash_table=0x55555fbd4400) at ../../../glib/ghash.c:1455
#5  0x00007ffff0d59bd6 in discord_free_user (data=0x555557ed4dd0) at libdiscord.c:431
#6  0x00007ffff72e1db2 in g_hash_table_remove_all_nodes
    (hash_table=hash_table@entry=0x55555f18bb00, notify=notify@entry=1, destruction=destruction@entry=1) at ../../../glib/ghash.c:706
#7  0x00007ffff72e28ef in g_hash_table_remove_all_nodes (destruction=1, notify=1, hash_table=0x55555f18bb00) at ../../../glib/ghash.c:628
#8  g_hash_table_unref (hash_table=0x55555f18bb00) at ../../../glib/ghash.c:1461
#9  g_hash_table_unref (hash_table=0x55555f18bb00) at ../../../glib/ghash.c:1455
#10 0x00007ffff0d5c177 in discord_close (pc=0x55555dc28350) at libdiscord.c:4411
#11 0x00007ffff7072d6a in _purple_connection_destroy (gc=0x55555dc28350) at ././libpurple/connection.c:275
#12 0x00007ffff705ee6e in purple_account_disconnect (account=account@entry=0x5555567e5420) at ././libpurple/account.c:1339
#13 0x00007ffff7071f16 in purple_connection_disconnect_cb (data=0x5555567e5420, data@entry=<error reading variable: value has been optimized out>)
    at ././libpurple/connection.c:523
#14 0x00007ffff72f6744 in g_timeout_dispatch (source=0x55555f9c2d90, callback=<optimized out>, user_data=<optimized out>)
    at ../../../glib/gmain.c:4933
@--Type <RET> for more, q to quit, c to continue without paging--
#15 0x00007ffff72f5be4 in g_main_dispatch (context=0x5555556c8780) at ../../../glib/gmain.c:3381
#16 g_main_context_dispatch (context=0x5555556c8780) at ../../../glib/gmain.c:4099
#17 0x00007ffff72f5f88 in g_main_context_iterate (context=0x5555556c8780, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ../../../glib/gmain.c:4175
#18 0x00007ffff72f6273 in g_main_loop_run (loop=0x555557a0f8d0) at ../../../glib/gmain.c:4373
#19 0x00007ffff79d8b2a in gtk_main () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#20 0x0000555555591d70 in main (argc=<optimized out>, argv=<optimized out>) at ././pidgin/gtkmain.c:947
EionRobb commented 2 years ago

Man, you get so many crashes in so many reconnecting accounts! Thank you for reporting them all. :)

EionRobb commented 2 years ago

Thanks again. Hopefully this latest commit helps?

bodqhrohro commented 2 years ago

I'll try it, thanks.

bodqhrohro commented 2 years ago

Huh, another one in a row (not sure about the phase this time):

[Thread 0x7fffda00f640 (LWP 748596) exited]
(10:52:59) log: Failed to open log file "/home/bodqhrohro/.purple/logs/801086682669121536.log" for reading: Нет такого файла или каталога
(10:52:59) Gtk: IA__gtk_widget_hide: assertion 'GTK_IS_WIDGET (widget)' failed
(10:52:59) g_log: purple_strreplace: assertion 'string != NULL' failed
(10:52:59) g_log: purple_strreplace: assertion 'string != NULL' failed
(10:52:59) LaTeX: Writing Message: https://youtu.be/uBtyC6OBJSg<br/><font back="#ff0000" color="#ff0000"> </font> <a href="https://www.youtube.com/channel/UC_auh_s5dpUYK_MgVEmAo3w"><b>Alex Graham</b></a><br/><font back="#ff0000" color="#ff0000"> </font> <a href="https://www.youtube.com/watch?v=uBtyC6OBJSg">ВЕСЬ КЛУБНЯК НУЛЕВЫХ С ТВОЕГО КНОПОЧНОГО  ТОЛЬКО НЕ ПЛАЧЬ</a><br/><font back="#ff0000" color="#ff0000"> </font> Тот самый клубняк нулевых, те самые треки, что качали нас с хрипящих динамиков сотового и мощных спикеров на лагерных дискотеках.<br>Их настоящие названия всегда оставались загадкой, пришло время исправить эту оплошность. Рекомендую слушать в наушниках.<br><br>КЛУБНЯК НУЛЕВЫХ КЛУБНАЯ МУЗЫКА нулевых клубняки клубняк астрономия <br>Клубняк бомба Клубняк басы ...<br/><font back="#ff0000" color="#ff0000"> </font> https://www.youtube.com/embed/uBtyC6OBJSg<br/><font back="#ff0000" color="#ff0000"> </font> Вс 30 янв 2022 10:52:15<br/>
(10:52:59) GLib: Source ID 1434090224 was not found when attempting to remove it
@--Type <RET> for more, q to quit, c to continue without paging--

Thread 1 "pidgin" received signal SIGSEGV, Segmentation fault.
purple_http_url_free (parsed_url=0x41) at purple2compat/http.c:3033
3033    purple_http_url_free(PurpleHttpURL *parsed_url)
@(gdb) bt
#0  purple_http_url_free (parsed_url=0x41) at purple2compat/http.c:3033
#1  0x00007ffff0d0f341 in purple_http_connection_free (hc=0x555557ce8d00) at purple2compat/http.c:1689
#2  purple_http_connection_terminate (hc=hc@entry=0x555557ce8d00) at purple2compat/http.c:1732
#3  0x00007ffff0d11238 in _purple_http_recv_loopbody (hc=hc@entry=0x555557ce8d00, fd=<optimized out>) at purple2compat/http.c:1298
#4  0x00007ffff0d118f0 in _purple_http_recv (_hc=0x555557ce8d00, fd=<optimized out>, cond=cond@entry=PURPLE_INPUT_READ) at purple2compat/http.c:1309
#5  0x00005555555cdfb2 in pidgin_io_invoke (source=<optimized out>, condition=<optimized out>, data=0x555558d8cd60) at ././pidgin/gtkeventloop.c:73
#6  0x00007ffff72f5be4 in g_main_dispatch (context=0x5555556c8780) at ../../../glib/gmain.c:3381
#7  g_main_context_dispatch (context=0x5555556c8780) at ../../../glib/gmain.c:4099
#8  0x00007ffff72f5f88 in g_main_context_iterate
    (context=context@entry=0x5555556c8780, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4175
#9  0x00007ffff72f603f in g_main_context_iteration (context=0x5555556c8780, may_block=1) at ../../../glib/gmain.c:4240
#10 0x00007ffff79d8d91 in gtk_main_iteration () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#11 0x00007ffff13e4655 in conversation_created_cb (conv=<optimized out>) at plugin.c:91
#12 0x00007ffff70ae81c in purple_signal_emit_vargs
    (instance=<optimized out>, signal=signal@entry=0x7ffff71013f4 "conversation-created", args=args@entry=0x7fffffffa350)
    at ././libpurple/signals.c:482
#13 0x00007ffff70ae9ae in purple_signal_emit (instance=<optimized out>, signal=signal@entry=0x7ffff71013f4 "conversation-created")
    at ././libpurple/signals.c:434
#14 0x00007ffff70776dc in purple_conversation_new
@--Type <RET> for more, q to quit, c to continue without paging--
    (type=type@entry=PURPLE_CONV_TYPE_CHAT, account=account@entry=0x555555c49390, name=name@entry=0x555555bcac20 "801091119286321172")
    at ././libpurple/conversation.c:497
#15 0x00007ffff70ad86c in serv_got_joined_chat (gc=0x55555715f670, id=305659884, name=name@entry=0x555555bcac20 "801091119286321172")
    at ././libpurple/server.c:856
#16 0x00007ffff0cffd06 in discord_open_chat (present=0, id=<optimized out>, da=0x555557b2aed0) at libdiscord.c:7111
#17 discord_join_chat_by_id (da=da@entry=0x555557b2aed0, id=id@entry=801091119286321172, present=present@entry=0) at libdiscord.c:7135
#18 0x00007ffff0d0308e in discord_process_message (da=da@entry=0x555557b2aed0, data=data@entry=0x555559248a10, special_type=special_type@entry=0)
    at libdiscord.c:2935
#19 0x00007ffff0d0494d in discord_got_history_of_room (user_data=0x555558d41010, node=<optimized out>, da=0x555557b2aed0) at libdiscord.c:6702
#20 discord_got_history_of_room (da=0x555557b2aed0, node=<optimized out>, user_data=0x555558d41010) at libdiscord.c:6682
#21 0x00007ffff0cf5721 in discord_response_callback (http_conn=0x555557c77b00, response=0x5555577601d0, user_data=0x55555833cf10)
    at libdiscord.c:1391
#22 0x00007ffff0d0f2fc in purple_http_connection_terminate (hc=hc@entry=0x555557c77b00) at purple2compat/http.c:1730
#23 0x00007ffff0d11238 in _purple_http_recv_loopbody (hc=hc@entry=0x555557c77b00, fd=<optimized out>) at purple2compat/http.c:1298
#24 0x00007ffff0d118f0 in _purple_http_recv (_hc=0x555557c77b00, fd=<optimized out>, cond=cond@entry=PURPLE_INPUT_READ) at purple2compat/http.c:1309
#25 0x00005555555cdfb2 in pidgin_io_invoke (source=<optimized out>, condition=<optimized out>, data=0x555556309010) at ././pidgin/gtkeventloop.c:73
#26 0x00007ffff72f5be4 in g_main_dispatch (context=0x5555556c8780) at ../../../glib/gmain.c:3381
#27 g_main_context_dispatch (context=0x5555556c8780) at ../../../glib/gmain.c:4099
#28 0x00007ffff72f5f88 in g_main_context_iterate (context=0x5555556c8780, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
@--Type <RET> for more, q to quit, c to continue without paging--
    at ../../../glib/gmain.c:4175
#29 0x00007ffff72f6273 in g_main_loop_run (loop=0x555555e08bb0) at ../../../glib/gmain.c:4373
#30 0x00007ffff79d8b2a in gtk_main () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#31 0x0000555555591d70 in main (argc=<optimized out>, argv=<optimized out>) at ././pidgin/gtkmain.c:947
bodqhrohro commented 2 years ago

Worth noting that before this crash it popped out lots of tabs for channels with no activity, which itself is not healthy. 2022-01-30-132249_1366x768_scrot 2022-01-30-133342_1366x768_scrot

pabs3 commented 2 years ago

@bodqhrohro so are you saying the patch didn't fix the issue for you?

bodqhrohro commented 2 years ago

@pabs3 it should, yet I cannot confirm it because I don't know the exact reproduction conditions ;) At least, it did not occur again yet.

pabs3 commented 2 years ago

Ok, thanks for the info. Guess I should update the Debian package then.

-- bye, pabs

https://bonedaddy.net/pabs3/

bodqhrohro commented 2 years ago

More context, Pidgin was just starting and retrieving messages it missed:

(17:39:44) log: Failed to open log file "/home/bodqhrohro/.purple/logs/800376413022453793.log" for reading: Нет такого файла или каталога
(17:39:44) Gtk: IA__gtk_widget_hide: assertion 'GTK_IS_WIDGET (widget)' failed
(17:39:44) g_log: purple_strreplace: assertion 'string != NULL' failed
(17:39:44) g_log: purple_strreplace: assertion 'string != NULL' failed
(17:39:44) LaTeX: Writing Message: <font size=1>┌──@bodqhrohro: Ты ж в курсе, что раздачи не на ...</font>
(17:39:45) g_log: Couldn’t close notification: Текст был пуст (или содержал только пробелы)
(17:39:45) LaTeX: Writing Message: Естественно нет
(17:39:45) GLib: Source ID 74240 was not found when attempting to remove it
(17:39:45) GLib: Source ID 1468316688 was not found when attempting to remove it
@--Type <RET> for more, q to quit, c to continue without paging--dns[1585684]: nobody needs me... =(
dns[1585683]: nobody needs me... =(
bt

Thread 1 "pidgin" received signal SIGSEGV, Segmentation fault.
purple_http_connection_free (hc=0x55555619a620) at purple2compat/http.c:1691
1691        purple_http_response_free(hc->response);
@(gdb) bt
#0  purple_http_connection_free (hc=0x55555619a620) at purple2compat/http.c:1691
#1  purple_http_connection_terminate (hc=hc@entry=0x55555619a620) at purple2compat/http.c:1732
#2  0x00007ffff0cfd238 in _purple_http_recv_loopbody (hc=hc@entry=0x55555619a620, fd=<optimized out>) at purple2compat/http.c:1298
#3  0x00007ffff0cfd8f0 in _purple_http_recv (_hc=0x55555619a620, fd=<optimized out>, cond=cond@entry=PURPLE_INPUT_READ) at purple2compat/http.c:1309
#4  0x00005555555cdfb2 in pidgin_io_invoke (source=<optimized out>, condition=<optimized out>, data=0x555557e09980) at ././pidgin/gtkeventloop.c:73
#5  0x00007ffff72f5be4 in g_main_dispatch (context=0x5555556c8b10) at ../../../glib/gmain.c:3381
#6  g_main_context_dispatch (context=0x5555556c8b10) at ../../../glib/gmain.c:4099
#7  0x00007ffff72f5f88 in g_main_context_iterate
    (context=context@entry=0x5555556c8b10, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4175
#8  0x00007ffff72f603f in g_main_context_iteration (context=0x5555556c8b10, may_block=1) at ../../../glib/gmain.c:4240
#9  0x00007ffff79d8d91 in gtk_main_iteration () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#10 0x00007ffff13dd655 in conversation_created_cb (conv=<optimized out>) at plugin.c:91
#11 0x00007ffff70ae81c in purple_signal_emit_vargs
    (instance=<optimized out>, signal=signal@entry=0x7ffff71013f4 "conversation-created", args=args@entry=0x7fffffffa1f0)
    at ././libpurple/signals.c:482
#12 0x00007ffff70ae9ae in purple_signal_emit (instance=<optimized out>, signal=signal@entry=0x7ffff71013f4 "conversation-created")
    at ././libpurple/signals.c:434
#13 0x00007ffff70776dc in purple_conversation_new
    (type=type@entry=PURPLE_CONV_TYPE_CHAT, account=account@entry=0x5555566a7a80, name=name@entry=0x5555578c7130 "801091119286321172")
@--Type <RET> for more, q to quit, c to continue without paging--
    at ././libpurple/conversation.c:497
#14 0x00007ffff70ad86c in serv_got_joined_chat (gc=0x5555562313c0, id=305659884, name=name@entry=0x5555578c7130 "801091119286321172")
    at ././libpurple/server.c:856
#15 0x00007ffff0cebd06 in discord_open_chat (present=0, id=<optimized out>, da=0x5555562119b0) at libdiscord.c:7111
#16 discord_join_chat_by_id (da=da@entry=0x5555562119b0, id=id@entry=801091119286321172, present=present@entry=0) at libdiscord.c:7135
#17 0x00007ffff0cef08e in discord_process_message (da=da@entry=0x5555562119b0, data=data@entry=0x555557494470, special_type=special_type@entry=0)
    at libdiscord.c:2935
#18 0x00007ffff0cf094d in discord_got_history_of_room (user_data=0x555557934490, node=<optimized out>, da=0x5555562119b0) at libdiscord.c:6702
#19 discord_got_history_of_room (da=0x5555562119b0, node=<optimized out>, user_data=0x555557934490) at libdiscord.c:6682
#20 0x00007ffff0ce1721 in discord_response_callback (http_conn=0x5555574ec290, response=0x555556237fb0, user_data=0x5555578a5df0)
    at libdiscord.c:1391
#21 0x00007ffff0cfb2fc in purple_http_connection_terminate (hc=hc@entry=0x5555574ec290) at purple2compat/http.c:1730
#22 0x00007ffff0cfd238 in _purple_http_recv_loopbody (hc=hc@entry=0x5555574ec290, fd=<optimized out>) at purple2compat/http.c:1298
#23 0x00007ffff0cfd8f0 in _purple_http_recv (_hc=0x5555574ec290, fd=<optimized out>, cond=cond@entry=PURPLE_INPUT_READ) at purple2compat/http.c:1309
#24 0x00005555555cdfb2 in pidgin_io_invoke (source=<optimized out>, condition=<optimized out>, data=0x5555579c09c0) at ././pidgin/gtkeventloop.c:73
#25 0x00007ffff72f5be4 in g_main_dispatch (context=0x5555556c8b10) at ../../../glib/gmain.c:3381
#26 g_main_context_dispatch (context=0x5555556c8b10) at ../../../glib/gmain.c:4099
#27 0x00007ffff72f5f88 in g_main_context_iterate (context=0x5555556c8b10, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ../../../glib/gmain.c:4175
@--Type <RET> for more, q to quit, c to continue without paging--
#28 0x00007ffff72f6273 in g_main_loop_run (loop=0x55555620b3e0) at ../../../glib/gmain.c:4373
#29 0x00007ffff79d8b2a in gtk_main () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#30 0x0000555555591d70 in main (argc=<optimized out>, argv=<optimized out>) at ././pidgin/gtkmain.c:947
bodqhrohro commented 2 years ago

If I wasn't patient enough, I would suppose it's a bug in libpurple itself:

(19:32:07) proxy: Connecting to chat.google.com:443.
(19:32:07) proxy: Connected to chat.google.com:443.
(19:32:09) nss: SSL version 3.4 using 128-bit AES-GCM with 128-bit AEAD MAC
Server Auth: 256-bit TLS 1.3, Key Exchange: 255-bit TLS 1.3, Compression: NULL
Cipher Suite Name: TLS_AES_128_GCM_SHA256
(19:32:09) nss: subject=CN=*.google.com issuer=CN=GTS CA 1C3,O=Google Trust Services LLC,C=US
(19:32:09) nss: subject=CN=GTS CA 1C3,O=Google Trust Services LLC,C=US issuer=CN=GTS Root R1,O=Google Trust Services LLC,C=US
(19:32:09) nss: subject=CN=GTS Root R1,O=Google Trust Services LLC,C=US issuer=CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE
(19:32:09) nss: subject=CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE issuer=CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE
(19:32:09) certificate/x509/tls_cached: Starting verify for chat.google.com
(19:32:09) certificate/x509/tls_cached: Checking for cached cert...
(19:32:09) certificate/x509/tls_cached: ...Found cached cert
(19:32:09) nss/x509: Loading certificate from /home/bodqhrohro/.purple/certificates/x509/tls_peers/chat.google.com
(19:32:09) certificate/x509/tls_cached: Peer cert matched cached
(19:32:09) nss/x509: Exporting certificate to /home/bodqhrohro/.purple/certificates/x509/tls_peers/chat.google.com
(19:32:09) util: Writing file /home/bodqhrohro/.purple/certificates/x509/tls_peers/chat.google.com
(19:32:09) nss: Trusting CN=*.google.com
(19:32:09) certificate: Successfully verified certificate for chat.google.com
(19:32:09) discord: sending frame: {"op":1,"d":10}
(19:32:10) discord: got frame data: {"t":null,"s":null,"op":11,"d":null}
(19:32:10) googlechat: longpoll_request_content had error: 'Invalid HTTP response code (400)'
(19:32:10) googlechat: longpoll_request_content had error: 'Invalid HTTP response code (400)'
(19:32:10) http: Request 0x55555eeefac0 performed without success.
(19:32:10) googlechat: longpoll_request_closed 400 Invalid HTTP response code (400)
(19:32:10) http: Performing new request 0x55555a2f3730 to chat.google.com.
(19:32:11) log: Failed to open log file "/home/bodqhrohro/.purple/logs/345661224446590976.log" for reading: Нет такого файла или каталога
(19:32:11) Gtk: IA__gtk_widget_hide: assertion 'GTK_IS_WIDGET (widget)' failed
(19:32:11) g_log: purple_strreplace: assertion 'string != NULL' failed
(19:32:11) g_log: purple_strreplace: assertion 'string != NULL' failed
(19:32:11) LaTeX: Writing Message: anyone here a developer?
(19:32:11) GLib: Source ID 6236 was not found when attempting to remove it
(19:32:11) GLib: Source ID 20 was not found when attempting to remove it
dns[3311101]: nobody needs me... =(
@--Type <RET> for more, q to quit, c to continue without paging--dns[3311123]: nobody needs me... =(

Thread 1 "pidgin" received signal SIGSEGV, Segmentation fault.
purple_http_connection_free (hc=0x55555ff85e40) at purple2compat/http.c:1687
1687            purple_http_connection_set_remove(hc->connection_set, hc);
@(gdb) bt
#0  purple_http_connection_free (hc=0x55555ff85e40) at purple2compat/http.c:1687
#1  purple_http_connection_terminate (hc=hc@entry=0x55555ff85e40) at purple2compat/http.c:1732
#2  0x00007ffff0cfd238 in _purple_http_recv_loopbody (hc=hc@entry=0x55555ff85e40, fd=<optimized out>) at purple2compat/http.c:1298
#3  0x00007ffff0cfd8f0 in _purple_http_recv (_hc=0x55555ff85e40, fd=<optimized out>, cond=cond@entry=PURPLE_INPUT_READ) at purple2compat/http.c:1309
#4  0x00005555555cdfb2 in pidgin_io_invoke (source=<optimized out>, condition=<optimized out>, data=0x5555588b6c10) at ././pidgin/gtkeventloop.c:73
#5  0x00007ffff72f5be4 in g_main_dispatch (context=0x5555556c8b10) at ../../../glib/gmain.c:3381
#6  g_main_context_dispatch (context=0x5555556c8b10) at ../../../glib/gmain.c:4099
#7  0x00007ffff72f5f88 in g_main_context_iterate (context=0x5555556c8b10, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ../../../glib/gmain.c:4175
#8  0x00007ffff72f6273 in g_main_loop_run (loop=0x555555f22c30) at ../../../glib/gmain.c:4373
#9  0x00007ffff79d8b2a in gtk_main () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#10 0x0000555555591d70 in main (argc=<optimized out>, argv=<optimized out>) at ././pidgin/gtkmain.c:947
@(gdb) p *hc
$5 = {gc = 0x55555eeefab0, callback = 0x55555d2f9bf0, user_data = 0x1400000034, is_reading = 84, is_keepalive = 52, is_cancelling = 20, 
  url = 0x1a5c00000014, request = 0x1400001035, response = 0x103400001054, socket_request = 0x105400000014, connection_set = 0x1400001034, 
  socket = 0x181c00001054, request_header = 0x1400001035, request_header_written = 20, request_contents_written = 84, main_header_got = 52, 
  headers_got = 20, response_buffer = 0x181c00001054, gz_stream = 0x1400001035, contents_reader_buffer = 0x1400000014, 
  contents_reader_requested = 20, redirects_count = 20, length_expected = 20, length_got = 6236, length_got_decompressed = 4149, is_chunked = 20, 
  in_chunk = 20, chunks_done = 20, chunk_length = 20, chunk_got = 4180, link_global = 0x10350000181c = {<error reading variable>
@(gdb) p *hc->connection_set
Cannot access memory at address 0x1400001034

So connection_set was freed somewhere before, I suppose.

By the way, why do you copy purple2compat over lots of your projects, instead of moving it into a distinct repository and including it as a git submodule?