[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#70763 X-original-commit: 575a524474fe8866cc71b3befc6bbbde8d73075e Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
@@ -775,9 +775,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']
|
||||
|
||||
Reference in New Issue
Block a user