Fix leaks in requests

Review Request #2300 — Created Feb. 28, 2023 and submitted

Information

pidgin/pidgin
default

Reviewers

Fixes a leak for images in requests:

3,627 bytes in 1 blocks are definitely lost in loss record 35,636 of 36,499
   at 0x484386F: malloc (vg_replace_malloc.c:393)
   by 0x4980168: g_malloc (gmem.c:130)
   by 0x4995723: UnknownInlinedFun (gstrfuncs.c:426)
   by 0x4995723: g_memdup2 (gstrfuncs.c:419)
   by 0x4D3E534: purple_request_field_image_new (request.c:1677)
   by 0x1CA970B1: purple_demo_protocol_request_fields_activate (purpledemoprotocolactions.c:553)
   by 0x4DB5FBF: g_closure_invoke (gclosure.c:832)
   by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796)
   by 0x4DD3419: g_signal_emit_valist (gsignal.c:3549)
   by 0x4DD3632: g_signal_emit (gsignal.c:3606)
   by 0x581C784: g_simple_action_activate (gsimpleaction.c:227)
   by 0x581B132: g_action_activate (gaction.c:399)
   by 0x51221B6: UnknownInlinedFun (gtkmenutrackeritem.c:842)
   by 0x51221B6: gtk_popover_item_activate.lto_priv.0 (gtkmenusectionbox.c:200)

and leak of the GObject wrapper for request fields:

4 bytes in 1 blocks are possibly lost in loss record 713 of 36,499
   at 0x484386F: malloc (vg_replace_malloc.c:393)
   by 0x4980168: g_malloc (gmem.c:130)
   by 0x4995602: g_strdup (gstrfuncs.c:363)
   by 0x488B324: create_list_field (gtkrequest.c:1504)
   by 0x488D1D7: pidgin_request_fields (gtkrequest.c:2160)
   by 0x4D3FFB8: purple_request_fields (request.c:2283)
   by 0x1CA971D6: purple_demo_protocol_request_fields_activate (purpledemoprotocolactions.c:562)
   by 0x4DB5FBF: g_closure_invoke (gclosure.c:832)
   by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796)
   by 0x4DD3419: g_signal_emit_valist (gsignal.c:3549)
   by 0x4DD3632: g_signal_emit (gsignal.c:3606)
   by 0x581C784: g_simple_action_activate (gsimpleaction.c:227)
56 bytes in 1 blocks are possibly lost in loss record 19,209 of 36,499
   at 0x48486AF: realloc (vg_replace_malloc.c:1451)
   by 0x498071F: g_realloc (gmem.c:201)
   by 0x49592C4: g_data_set_internal (gdataset.c:474)
   by 0x488B347: create_list_field (gtkrequest.c:1504)
   by 0x488D1D7: pidgin_request_fields (gtkrequest.c:2160)
   by 0x4D3FFB8: purple_request_fields (request.c:2283)
   by 0x1CA971D6: purple_demo_protocol_request_fields_activate (purpledemoprotocolactions.c:562)
   by 0x4DB5FBF: g_closure_invoke (gclosure.c:832)
   by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796)
   by 0x4DD3419: g_signal_emit_valist (gsignal.c:3549)
   by 0x4DD3632: g_signal_emit (gsignal.c:3606)
   by 0x581C784: g_simple_action_activate (gsimpleaction.c:227)
614 (192 direct, 422 indirect) bytes in 8 blocks are definitely lost in loss record 33,122 of 36,499
   at 0x484386F: malloc (vg_replace_malloc.c:393)
   by 0x4980168: g_malloc (gmem.c:130)
   by 0x4997AB5: g_slice_alloc (gslice.c:1074)
   by 0x49980EC: g_slice_alloc0 (gslice.c:1100)
   by 0x4DDF04B: g_type_create_instance (gtype.c:1913)
   by 0x4DC4C1F: g_object_new_internal (gobject.c:2228)
   by 0x4DC6247: g_object_new_with_properties (gobject.c:2391)
   by 0x4DC6FF0: g_object_new (gobject.c:2037)
   by 0x488B2D5: create_list_field (gtkrequest.c:1499)
   by 0x488D1D7: pidgin_request_fields (gtkrequest.c:2160)
   by 0x4D3FFB8: purple_request_fields (request.c:2283)
   by 0x1CA971D6: purple_demo_protocol_request_fields_activate (purpledemoprotocolactions.c:562)

and a request label:

128 bytes in 1 blocks are definitely lost in loss record 27,735 of 36,499
   at 0x484378A: malloc (vg_replace_malloc.c:392)
   by 0x484870B: realloc (vg_replace_malloc.c:1451)
   by 0x498071F: g_realloc (gmem.c:201)
   by 0x499A343: g_string_maybe_expand (gstring.c:92)
   by 0x499A3BF: g_string_sized_new (gstring.c:116)
   by 0x4981BCB: g_markup_escape_text (gmarkup.c:2323)
   by 0x4887D8A: pidgin_request_escape (gtkrequest.c:360)
   by 0x488CED9: pidgin_request_fields (gtkrequest.c:2105)
   by 0x4D3FFB8: purple_request_fields (request.c:2283)
   by 0x1CA971D6: purple_demo_protocol_request_fields_activate (purpledemoprotocolactions.c:562)
   by 0x4DB5FBF: g_closure_invoke (gclosure.c:832)
   by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796)

and one in the demo protocol:

40 bytes in 1 blocks are definitely lost in loss record 15,277 of 36,499
   at 0x484386F: malloc (vg_replace_malloc.c:393)
   by 0x4AE3017: __vasprintf_internal (vasprintf.c:71)
   by 0x49C2E81: UnknownInlinedFun (stdio2.h:169)
   by 0x49C2E81: g_vasprintf (gprintf.c:340)
   by 0x4998EA0: g_strdup_vprintf (gstrfuncs.c:553)
   by 0x4998F5C: g_strdup_printf (gstrfuncs.c:583)
   by 0x1CA9584E: purple_demo_protocol_request_input_activate (purpledemoprotocolactions.c:203)
   by 0x4DB5FBF: g_closure_invoke (gclosure.c:832)
   by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796)
   by 0x4DD3419: g_signal_emit_valist (gsignal.c:3549)
   by 0x4DD3632: g_signal_emit (gsignal.c:3606)
   by 0x581C784: g_simple_action_activate (gsimpleaction.c:227)
   by 0x581B132: g_action_activate (gaction.c:399)

Ran valgrind and confirmed above leaks were not there after opening Request Input and Request Fields.

Summary ID
Fix leaks in requests
170b58fb3503ae19fb2e0178a38f4f3f2a863ac5
grim
  1. Ship It!
  2. Good finds! Thanks!!

  3. 
      
grim
Review request changed
Status:
Completed