]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Parse HREF urls without explicit prefix
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 15 Jul 2017 22:16:03 +0000 (23:16 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 15 Jul 2017 22:16:03 +0000 (23:16 +0100)
Issue: #1752

src/libserver/html.c

index 7d0a30390c48779a9bca25d196c2c278ccb76b89..2d57f0b0d4fa9790a014770f4613abc899d2bf71 100644 (file)
@@ -1453,7 +1453,7 @@ rspamd_html_process_url (rspamd_mempool_t *pool, const gchar *start, guint len,
        const gchar *p, *s;
        gchar *d;
        guint i, dlen;
-       gboolean has_bad_chars = FALSE;
+       gboolean has_bad_chars = FALSE, no_prefix = FALSE;
        static const gchar hexdigests[16] = "0123456789abcdef";
 
        p = start;
@@ -1495,9 +1495,20 @@ rspamd_html_process_url (rspamd_mempool_t *pool, const gchar *start, guint len,
                }
        }
 
+       if (rspamd_substring_search (s, len, "://", 3) == (-1)) {
+               /* We have no prefix */
+               dlen += sizeof ("http://") - 1;
+               no_prefix = TRUE;
+       }
+
        decoded = rspamd_mempool_alloc (pool, dlen + 1);
        d = decoded;
 
+       if (no_prefix) {
+               memcpy (d, "http://", sizeof ("http://") - 1);
+               d += sizeof ("http://") - 1;
+       }
+
        /* We also need to remove all internal newlines and encode unsafe characters */
        for (i = 0; i < len; i ++) {
                if (G_UNLIKELY (s[i] == '\r' || s[i] == '\n')) {