summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Sales de Andrade <quantum.analyst@gmail.com>2023-03-22 03:22:50 -0500
committerElliott Sales de Andrade <quantum.analyst@gmail.com>2023-03-22 03:22:50 -0500
commit16071bc64088b65c889ddbc993f8f52cecace8ed (patch)
tree0e38ababb1cd65edafadcace9bcb4923b6a2c12b
parent86de07b44f35f87da9d9105b209bde632d368671 (diff)
downloadpidgin-16071bc64088b65c889ddbc993f8f52cecace8ed.tar.gz
Fix leaks in purple markup
Fix leaks when running the markup tests. These are all from leaking `tags`: ``` 24 bytes in 1 blocks are definitely lost in loss record 101 of 251 at 0x4848464: calloc (vg_replace_malloc.c:1340) by 0x49F75F0: g_malloc0 (gmem.c:163) by 0x48E563C: purple_markup_html_to_xhtml (purplemarkup.c:437) by 0x401214: test_purple_markup_html_to_xhtml (test_markup.c:213) by 0x4A1CC7D: UnknownInlinedFun (gtestutils.c:2933) by 0x4A1CC7D: g_test_run_suite_internal (gtestutils.c:3021) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1D181: g_test_run_suite (gtestutils.c:3115) by 0x4A156EC: UnknownInlinedFun (gtestutils.c:2234) by 0x4A156EC: g_test_run (gtestutils.c:2221) by 0x401575: main (test_markup.c:281) 24 bytes in 1 blocks are definitely lost in loss record 102 of 251 at 0x4848464: calloc (vg_replace_malloc.c:1340) by 0x49F75F0: g_malloc0 (gmem.c:163) by 0x48E0319: purple_markup_html_to_xhtml (purplemarkup.c:260) by 0x401214: test_purple_markup_html_to_xhtml (test_markup.c:213) by 0x4A1CC7D: UnknownInlinedFun (gtestutils.c:2933) by 0x4A1CC7D: g_test_run_suite_internal (gtestutils.c:3021) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1D181: g_test_run_suite (gtestutils.c:3115) by 0x4A156EC: UnknownInlinedFun (gtestutils.c:2234) by 0x4A156EC: g_test_run (gtestutils.c:2221) by 0x401575: main (test_markup.c:281) 24 bytes in 1 blocks are definitely lost in loss record 103 of 251 at 0x4848464: calloc (vg_replace_malloc.c:1340) by 0x49F75F0: g_malloc0 (gmem.c:163) by 0x48E07B7: purple_markup_html_to_xhtml (purplemarkup.c:261) by 0x401214: test_purple_markup_html_to_xhtml (test_markup.c:213) by 0x4A1CC7D: UnknownInlinedFun (gtestutils.c:2933) by 0x4A1CC7D: g_test_run_suite_internal (gtestutils.c:3021) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1D181: g_test_run_suite (gtestutils.c:3115) by 0x4A156EC: UnknownInlinedFun (gtestutils.c:2234) by 0x4A156EC: g_test_run (gtestutils.c:2221) by 0x401575: main (test_markup.c:281) 24 bytes in 1 blocks are definitely lost in loss record 104 of 251 at 0x4848464: calloc (vg_replace_malloc.c:1340) by 0x49F75F0: g_malloc0 (gmem.c:163) by 0x48E0C55: purple_markup_html_to_xhtml (purplemarkup.c:262) by 0x401214: test_purple_markup_html_to_xhtml (test_markup.c:213) by 0x4A1CC7D: UnknownInlinedFun (gtestutils.c:2933) by 0x4A1CC7D: g_test_run_suite_internal (gtestutils.c:3021) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1D181: g_test_run_suite (gtestutils.c:3115) by 0x4A156EC: UnknownInlinedFun (gtestutils.c:2234) by 0x4A156EC: g_test_run (gtestutils.c:2221) by 0x401575: main (test_markup.c:281) 24 bytes in 1 blocks are definitely lost in loss record 105 of 251 at 0x4848464: calloc (vg_replace_malloc.c:1340) by 0x49F75F0: g_malloc0 (gmem.c:163) by 0x48E10F3: purple_markup_html_to_xhtml (purplemarkup.c:263) by 0x401214: test_purple_markup_html_to_xhtml (test_markup.c:213) by 0x4A1CC7D: UnknownInlinedFun (gtestutils.c:2933) by 0x4A1CC7D: g_test_run_suite_internal (gtestutils.c:3021) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1D181: g_test_run_suite (gtestutils.c:3115) by 0x4A156EC: UnknownInlinedFun (gtestutils.c:2234) by 0x4A156EC: g_test_run (gtestutils.c:2221) by 0x401575: main (test_markup.c:281) ``` and these from not freeing the result from `purple_unescape_html`: ``` 256 bytes in 2 blocks are definitely lost in loss record 241 of 251 at 0x484378A: malloc (vg_replace_malloc.c:392) by 0x484870B: realloc (vg_replace_malloc.c:1451) by 0x49F771F: g_realloc (gmem.c:201) by 0x4A11343: g_string_maybe_expand (gstring.c:92) by 0x4A113BF: g_string_sized_new (gstring.c:116) by 0x48E7F74: purple_unescape_html (purplemarkup.c:1101) by 0x48DEBBA: purple_markup_html_to_xhtml (purplemarkup.c:224) by 0x401214: test_purple_markup_html_to_xhtml (test_markup.c:213) by 0x4A1CC7D: UnknownInlinedFun (gtestutils.c:2933) by 0x4A1CC7D: g_test_run_suite_internal (gtestutils.c:3021) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1D181: g_test_run_suite (gtestutils.c:3115) 256 bytes in 2 blocks are definitely lost in loss record 242 of 251 at 0x484378A: malloc (vg_replace_malloc.c:392) by 0x484870B: realloc (vg_replace_malloc.c:1451) by 0x49F771F: g_realloc (gmem.c:201) by 0x4A11343: g_string_maybe_expand (gstring.c:92) by 0x4A113BF: g_string_sized_new (gstring.c:116) by 0x48E7F74: purple_unescape_html (purplemarkup.c:1101) by 0x48E534D: purple_markup_html_to_xhtml (purplemarkup.c:397) by 0x401214: test_purple_markup_html_to_xhtml (test_markup.c:213) by 0x4A1CC7D: UnknownInlinedFun (gtestutils.c:2933) by 0x4A1CC7D: g_test_run_suite_internal (gtestutils.c:3021) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1C9E4: g_test_run_suite_internal (gtestutils.c:3038) by 0x4A1D181: g_test_run_suite (gtestutils.c:3115) ``` Also modified the test to check not passing the optional arguments. Testing Done: Compiled and ran tests in valgrind and leaks were gone. Reviewed at https://reviews.imfreedom.org/r/2379/
-rw-r--r--libpurple/purplemarkup.c19
-rw-r--r--libpurple/tests/test_markup.c10
2 files changed, 24 insertions, 5 deletions
diff --git a/libpurple/purplemarkup.c b/libpurple/purplemarkup.c
index 45cb21704e..528c20805a 100644
--- a/libpurple/purplemarkup.c
+++ b/libpurple/purplemarkup.c
@@ -221,7 +221,12 @@ purple_markup_html_to_xhtml(const char *html, char **xhtml_out,
if (cdata && url &&
(!g_string_equal(cdata, url) && (g_ascii_strncasecmp(url->str, "mailto:", 7) != 0 ||
g_utf8_collate(url->str + 7, cdata->str) != 0)))
- g_string_append_printf(plain, " <%s>", g_strstrip(purple_unescape_html(url->str)));
+ {
+ char *unescaped = purple_unescape_html(url->str);
+ g_string_append_printf(plain, " <%s>",
+ g_strstrip(unescaped));
+ g_free(unescaped);
+ }
if (cdata) {
g_string_free(cdata, TRUE);
cdata = NULL;
@@ -393,10 +398,14 @@ purple_markup_html_to_xhtml(const char *html, char **xhtml_out,
if(src && xhtml)
g_string_append_printf(xhtml, "<img src='%s' alt='%s' />", g_strstrip(src->str), alt ? alt->str : "");
if(alt) {
- if(plain)
- plain = g_string_append(plain, purple_unescape_html(alt->str));
- if(!src && xhtml)
+ if(plain) {
+ char *unescaped = purple_unescape_html(alt->str);
+ plain = g_string_append(plain, unescaped);
+ g_free(unescaped);
+ }
+ if(!src && xhtml) {
xhtml = g_string_append(xhtml, alt->str);
+ }
g_string_free(alt, TRUE);
}
g_string_free(src, TRUE);
@@ -614,7 +623,7 @@ purple_markup_html_to_xhtml(const char *html, char **xhtml_out,
g_string_append_printf(xhtml, "</%s>", pt->dest_tag);
}
}
- g_list_free(tags);
+ g_clear_list(&tags, g_free);
if(xhtml_out)
*xhtml_out = g_string_free(xhtml, FALSE);
if(plain_out)
diff --git a/libpurple/tests/test_markup.c b/libpurple/tests/test_markup.c
index a77e9617a6..5a08517ee9 100644
--- a/libpurple/tests/test_markup.c
+++ b/libpurple/tests/test_markup.c
@@ -217,6 +217,16 @@ test_purple_markup_html_to_xhtml(void) {
g_assert_cmpstr(data[i].plaintext, ==, plaintext);
g_free(plaintext);
+
+ /* Check only asking for xhtml works. */
+ purple_markup_html_to_xhtml(data[i].markup, &xhtml, NULL);
+ g_assert_cmpstr(data[i].xhtml, ==, xhtml);
+ g_free(xhtml);
+
+ /* Check only asking for plaintext works. */
+ purple_markup_html_to_xhtml(data[i].markup, NULL, &plaintext);
+ g_assert_cmpstr(data[i].plaintext, ==, plaintext);
+ g_free(plaintext);
}
}