From f16e48ae44dbb83eade34780718f04bd31e8d489 Mon Sep 17 00:00:00 2001 From: thomasgenster Date: Tue, 15 Jul 2014 21:39:58 +0200 Subject: [PATCH] fix youtube KeyError --- youtube_dl/jsinterp.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/youtube_dl/jsinterp.py b/youtube_dl/jsinterp.py index 3bbb07704..f439ba0e5 100644 --- a/youtube_dl/jsinterp.py +++ b/youtube_dl/jsinterp.py @@ -45,6 +45,23 @@ class JSInterpreter(object): v = self.interpret_expression(expr, local_vars, allow_recursion) return assign(v) + def XG(self, list, desiredNonCommentArgIndex): + file = list[0] + v = int(desiredNonCommentArgIndex) % int(len(list)) + list[0] = list[int(v)] + list[int(desiredNonCommentArgIndex)] = file + return list + + def NZ(self, suite): + return suite[::-1] + + def PL(self, curr, _part): + return curr[int(_part):] + + def fo(self, curr): + curr = curr.split("") + + def interpret_expression(self, expr, local_vars, allow_recursion): if expr.isdigit(): return int(expr) @@ -55,7 +72,20 @@ class JSInterpreter(object): m = re.match(r'^(?P[a-z]+)\.(?P.*)$', expr) if m: member = m.group('member') - val = local_vars[m.group('in')] + if m.group('in') == u'fo': + val = local_vars[u'a'] + le = re.match(r'^(?P[A-Z]+)\([a]\,(?P.*)\)$', member) + f = le.group('function') + n = le.group('num') + if f == 'XG': + return self.XG(val, n) + elif f == 'NZ': + return self.NZ(val) + elif f == 'PL': + return self.PL(val, n) + else: + val = local_vars[m.group('in')] + if member == 'split("")': return list(val) if member == 'join("")': @@ -64,6 +94,7 @@ class JSInterpreter(object): return len(val) if member == 'reverse()': return val[::-1] + slice_m = re.match(r'slice\((?P.*)\)', member) if slice_m: idx = self.interpret_expression(