diff options
Diffstat (limited to 'libpurple')
-rw-r--r-- | libpurple/purplemarkup.c | 19 | ||||
-rw-r--r-- | libpurple/tests/test_markup.c | 10 |
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); } } |