aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-03-29 16:08:47 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-03-29 16:08:47 +0100
commit0fcb6c7dc829b0475b3e99f79072ee01ff0b530c (patch)
treec9e9d5625ff6e8e6934522f887315b68a7175c2c /src/libserver
parent1424d904c9c5cb1593b369949354d376af56f111 (diff)
downloadrspamd-0fcb6c7dc829b0475b3e99f79072ee01ff0b530c.tar.gz
rspamd-0fcb6c7dc829b0475b3e99f79072ee01ff0b530c.zip
[Feature] Find URLs with '\r' and '\n' inside href attribute
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/html.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/libserver/html.c b/src/libserver/html.c
index b799e9280..49034acf6 100644
--- a/src/libserver/html.c
+++ b/src/libserver/html.c
@@ -1131,6 +1131,7 @@ rspamd_html_process_url (rspamd_mempool_t *pool, const gchar *start, guint len,
gsize decoded_len;
gboolean has_spaces = FALSE;
const gchar *p;
+ gchar *t, *h;
p = start;
@@ -1166,6 +1167,21 @@ rspamd_html_process_url (rspamd_mempool_t *pool, const gchar *start, guint len,
rspamd_strlcpy (decoded, start, len + 1);
decoded_len = rspamd_decode_url (decoded, start, len);
+ /* We also need to remove all internal newlines */
+ t = decoded;
+ h = t;
+
+ while (*h) {
+ if (*h == '\r' || *h == '\n') {
+ h ++;
+ decoded_len --;
+ }
+ else {
+ *t++ = *h++;
+ }
+ }
+ *t = *h;
+
if (comp) {
comp->start = decoded;
comp->len = decoded_len;