From 575a524474fe8866cc71b3befc6bbbde8d73075e Mon Sep 17 00:00:00 2001 From: Julien Banken <jbn@odoo.com> Date: Mon, 10 May 2021 07:36:51 +0000 Subject: [PATCH] [FIX] slides: Verifying the returned value of re.search before accessing the capture groups. The `search` function of the `re` package can return `None` if the provided string does not match with the provided pattern (https://docs.python.org/3/library/re.html#re.Pattern.search). On the `_parse_youtube_document` function of the `slide.slide` model, we are directly accessing the capture groups from the returned value of the `search` function without checking that the returned value is actually a 'match' object. As a result, an exception can be throw if there is no match as, in that case, the `search` function will return `None` and the `group` function will not be defined on `None`. To avoid throwing an exception, we will check that the returned value of the `search` function is not `None` before accessing the capture groups via the `group` function. LINKS Task id: 2525007 closes odoo/odoo#70583 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com> --- addons/website_slides/models/slide_slide.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py index 298803f1d269..75adac23de50 100644 --- a/addons/website_slides/models/slide_slide.py +++ b/addons/website_slides/models/slide_slide.py @@ -739,9 +739,10 @@ class Slide(models.Model): youtube_duration = youtube_values.get('contentDetails', {}).get('duration') if youtube_duration: parsed_duration = re.search(r'^PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?$', youtube_duration) - values['completion_time'] = (int(parsed_duration.group(1) or 0)) + \ - (int(parsed_duration.group(2) or 0) / 60) + \ - (int(parsed_duration.group(3) or 0) / 3600) + if parsed_duration: + values['completion_time'] = (int(parsed_duration.group(1) or 0)) + \ + (int(parsed_duration.group(2) or 0) / 60) + \ + (int(parsed_duration.group(3) or 0) / 3600) if youtube_values.get('snippet'): snippet = youtube_values['snippet'] -- GitLab