youtube-dl

Another place where youtube-dl lives on
git clone git://git.oshgnacknak.de/youtube-dl.git
Log | Files | Refs | README | LICENSE

commit 4baafa229d5e013a62d636fa60920cdc1a876a5a
parent 7f3e33a1475cd4ac11c73108e03d3405b86262b8
Author: Philipp Hagemeister <phihag@phihag.de>
Date:   Mon, 17 Nov 2014 03:46:23 +0100

[swfinterp] Intepret more multinames

Diffstat:
Atest/swftests/DictCall.as | 10++++++++++
Myoutube_dl/swfinterp.py | 9+++++++++
2 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/test/swftests/DictCall.as b/test/swftests/DictCall.as @@ -0,0 +1,10 @@ +// input: [{"x": 1, "y": 2}] +// output: 3 + +package { +public class DictCall { + public static function main(d:Object):int{ + return d.x + d.y; + } +} +} diff --git a/youtube_dl/swfinterp.py b/youtube_dl/swfinterp.py @@ -213,6 +213,10 @@ class SWFInterpreter(object): u30() # namespace_idx name_idx = u30() self.multinames.append(self.constant_strings[name_idx]) + elif kind == 0x09: + name_idx = u30() + u30() + self.multinames.append(self.constant_strings[name_idx]) else: self.multinames.append(_Multiname(kind)) for _c2 in range(MULTINAME_SIZES[kind]): @@ -557,6 +561,11 @@ class SWFInterpreter(object): obj = stack.pop() assert isinstance(obj, list) stack.append(len(obj)) + elif isinstance(pname, compat_str): # Member access + obj = stack.pop() + assert isinstance(obj, (dict, _ScopeDict)), \ + 'Accessing member on %r' % obj + stack.append(obj[pname]) else: # Assume attribute access idx = stack.pop() assert isinstance(idx, int)