diff options
Diffstat (limited to 'youtube_dl/jsinterp.py')
| -rw-r--r-- | youtube_dl/jsinterp.py | 23 | 
1 files changed, 14 insertions, 9 deletions
diff --git a/youtube_dl/jsinterp.py b/youtube_dl/jsinterp.py index 061e92c2a..c35765702 100644 --- a/youtube_dl/jsinterp.py +++ b/youtube_dl/jsinterp.py @@ -240,21 +240,26 @@ class JSInterpreter(object):              switch_val, remaining = self._separate_at_paren(expr[m.end() - 1:], ')')              switch_val = self.interpret_expression(switch_val, local_vars, allow_recursion)              body, expr = self._separate_at_paren(remaining, '}') -            body, default = body.split('default:') if 'default:' in body else (body, None) -            items = body.split('case ')[1:] -            if default: -                items.append('default:%s' % (default, )) -            matched = False -            for item in items: -                case, stmt = [i.strip() for i in self._separate(item, ':', 1)] -                matched = matched or case == 'default' or switch_val == self.interpret_expression(case, local_vars, allow_recursion) -                if matched: +            items = body.replace('default:', 'case default:').split('case ')[1:] +            for default in (False, True): +                matched = False +                for item in items: +                    case, stmt = [i.strip() for i in self._separate(item, ':', 1)] +                    if default: +                        matched = matched or case == 'default' +                    elif not matched: +                        matched = (case != 'default' +                                   and switch_val == self.interpret_expression(case, local_vars, allow_recursion)) +                    if not matched: +                        continue                      try:                          ret, should_abort = self.interpret_statement(stmt, local_vars, allow_recursion - 1)                          if should_abort:                              return ret                      except JS_Break:                          break +                if matched: +                    break              return self.interpret_statement(expr, local_vars, allow_recursion - 1)[0]          # Comma separated statements  | 
