diff --git a/addons/link_tracker/models/link_tracker.py b/addons/link_tracker/models/link_tracker.py index 50b00b9011f..ace848971af 100644 --- a/addons/link_tracker/models/link_tracker.py +++ b/addons/link_tracker/models/link_tracker.py @@ -10,6 +10,8 @@ from werkzeug import urls from odoo import tools, models, fields, api, _ +URL_MAX_SIZE = 10 * 1024 * 1024 + class LinkTracker(models.Model): """ Link trackers allow users to wrap any URL into a short URL that can be @@ -94,7 +96,15 @@ class LinkTracker(models.Model): @api.depends('url') def _get_title_from_url(self, url): try: - page = requests.get(url, timeout=5) + head = requests.head(url, timeout=5) + if ( + int(head.headers.get('Content-Length', 0)) > URL_MAX_SIZE + or + 'text/html' not in head.headers.get('Content-Type', 'text/html') + ): + return url + # HTML parser can work with a part of page, so ask server to limit downloading to 50 KB + page = requests.get(url, timeout=5, headers={"range": "bytes=0-50000"}) p = html.fromstring(page.text.encode('utf-8'), parser=html.HTMLParser(encoding='utf-8')) title = p.find('.//title').text except: