summaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorMiecio Za <miecio@miecio.net>2019-03-07 12:40:46 +0100
committerMiecio Za <miecio@miecio.net>2019-03-07 12:40:46 +0100
commit33e60cf84e4c87149e6d00bb12e6744d28e702e9 (patch)
treef1abde31a8e6e5f89c6d4b7ad7ac5aecd66e3de4 /src/libserver
parent84264594d874881dd4556dc476d8a3af842787e7 (diff)
downloadrspamd-33e60cf84e4c87149e6d00bb12e6744d28e702e9.tar.gz
rspamd-33e60cf84e4c87149e6d00bb12e6744d28e702e9.zip
[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.
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/html.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/libserver/html.c b/src/libserver/html.c
index cdcaf4ebb..fef769ec1 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,