From: Miecio Za Date: Thu, 7 Mar 2019 11:40:46 +0000 (+0100) Subject: [Fix] Fix memor leaks and whitespace processing X-Git-Tag: 1.9.0~19^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F2771%2Fhead;p=thirdparty%2Frspamd.git [Fix] Fix memor leaks and whitespace processing Fixed for memory leaks, add simple whitespace character processing. Everything like '\n' '\r' '\t' should be replaced by simple space. --- diff --git a/src/libserver/html.c b/src/libserver/html.c index cdcaf4ebbf..fef769ec10 100644 --- a/src/libserver/html.c +++ b/src/libserver/html.c @@ -2373,11 +2373,28 @@ rspamd_html_check_displayed_url (rspamd_mempool_t *pool, return; } - gint visible_part_len = dest->len - href_offset; - url->visible_part = rspamd_mempool_alloc0(pool, visible_part_len +1); - url->visible_partlen = visible_part_len; - gchar *visible_part = g_strndup(dest->data + href_offset, visible_part_len); - g_stpcpy(url->visible_part, visible_part); + url->visible_part = rspamd_mempool_alloc0(pool, dest->len - href_offset+1); + gchar *current_processed_char = dest->data + href_offset; + gchar *current_char_in_struct = url->visible_part; + gboolean previous_char_was_space = false; + + while (current_processed_char < (gchar*) dest->data + dest->len) { + if (g_ascii_isspace(*current_processed_char)) { + if (previous_char_was_space) { + current_processed_char++; + continue; + } + previous_char_was_space = true; + *current_char_in_struct = ' '; + } else { + *current_char_in_struct = *current_processed_char; + previous_char_was_space = false; + } + current_char_in_struct++; + current_processed_char++; + } + *current_char_in_struct = '\0'; + url->visible_partlen = current_char_in_struct - url->visible_part; rspamd_html_url_is_phished (pool, url, dest->data + href_offset,