Browse Source

[swfinterp] Intepret more multinames

totalwebcasting
Philipp Hagemeister 10 years ago
parent
commit
4baafa229d
2 changed files with 19 additions and 0 deletions
  1. +10
    -0
      test/swftests/DictCall.as
  2. +9
    -0
      youtube_dl/swfinterp.py

+ 10
- 0
test/swftests/DictCall.as View File

@ -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;
}
}
}

+ 9
- 0
youtube_dl/swfinterp.py View File

@ -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)


Loading…
Cancel
Save