--- a/libpurple/purplemarkup.c Wed Mar 22 03:22:12 2023 -0500
+++ b/libpurple/purplemarkup.c Wed Mar 22 03:22:50 2023 -0500
@@ -221,7 +221,12 @@
(!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_string_free(cdata, TRUE);
@@ -393,10 +398,14 @@
g_string_append_printf(xhtml, "<img src='%s' alt='%s' />", g_strstrip(src->str), alt ? alt->str : "");
- plain = g_string_append(plain, purple_unescape_html(alt->str));
+ char *unescaped = purple_unescape_html(alt->str); + plain = g_string_append(plain, unescaped); xhtml = g_string_append(xhtml, alt->str);
g_string_free(alt, TRUE);
g_string_free(src, TRUE);
@@ -614,7 +623,7 @@
g_string_append_printf(xhtml, "</%s>", pt->dest_tag);
+ g_clear_list(&tags, g_free); *xhtml_out = g_string_free(xhtml, FALSE);
--- a/libpurple/tests/test_markup.c Wed Mar 22 03:22:12 2023 -0500
+++ b/libpurple/tests/test_markup.c Wed Mar 22 03:22:50 2023 -0500
@@ -217,6 +217,16 @@
g_assert_cmpstr(data[i].plaintext, ==, plaintext);
+ /* Check only asking for xhtml works. */ + purple_markup_html_to_xhtml(data[i].markup, &xhtml, NULL); + g_assert_cmpstr(data[i].xhtml, ==, xhtml); + /* Check only asking for plaintext works. */ + purple_markup_html_to_xhtml(data[i].markup, NULL, &plaintext); + g_assert_cmpstr(data[i].plaintext, ==, plaintext);