claus / as3swf

Low level Actionscript 3 library to parse, create, modify and publish SWF files.
MIT License
526 stars 127 forks source link

ReferenceError: Error #1069: Property undefined not found on __AS3__.vec.Vector.<com.codeazur.as3swf.tags::ITag> and there is no default value. #4

Closed RickyAbell closed 13 years ago

RickyAbell commented 14 years ago

I've been playing around with as3swf and am very impressed with what it can do. I've tested it on a number of SWFs and most of them work properly, but I've run into an error.

Here's the stacktrace: ReferenceError: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value. at com.codeazur.as3swf::SWF/getTagByCharacterId()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWF.as:48] at com.codeazur.as3swf::SWFTimeline/getTagByCharacterId()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWFTimeline.as:86] at com.codeazur.as3swf::SWFTimeline/buildLayers()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWFTimeline.as:324] at com.codeazur.as3swf::SWFTimeline/parseFinalize()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWFTimeline.as:175] at com.codeazur.as3swf::SWFTimeline/parse()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWFTimeline.as:92] at com.codeazur.as3swf::SWF/parse()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWF.as:68] at com.codeazur.as3swf::SWF/loadBytes()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWF.as:55] at com.codeazur.as3swf::SWF()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWF.as:34] at com.SWFScraper::SWFScraper/processByteArrays()[C:\Users**\SWFDetailsExtractor\src\com\SWFScraper\SWFScraper.as:105] at com.SWFScraper::SWFScraper/loadedSWF()[C:\Users**\SWFDetailsExtractor\src\com\SWFScraper\SWFScraper.as:88]

and the console output in FlashDevelop: WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 299 WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 325 WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 350 WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 368 WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 384 WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 402 WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 502 WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 641 WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 654 WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 693 [Fault] exception, information=ReferenceError: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value.

Is there any known reason it would try pull a value from the timeline dictionary that doesn't exist? Thanks

claus commented 14 years ago

Is it possible that you are trying to access a character id that is not defined? Can you send me that SWF?

RickyAbell commented 13 years ago

I'm not explicitly accessing the timeline dictionary myself with a character id. All I did was pass a bytearray from my .swf to a new instance of SWF and it hit this error. I checked and the .swf is not corrupted or obfuscated. I've emailed the .swf to you.

claus commented 13 years ago

Yeah the bug manifests itself in the part of the code that creates the layer info, which is actually not really needed for most applications (and can be very heavy on the cpu for bigger/complicated swfs). I am going to make that part opt-in.

The bug's origin is elsewhere though, and, as you said, seems only to kick in with certain kinds of swf. Consider it fixed tomorrow latest. Watch this space for updates, and thanks for reporting!

RickyAbell commented 13 years ago

Oh ok I see. Thanks for looking into it!

claus commented 13 years ago

Turned out that PlaceObject3 tags weren't handled correctly by SWFTimeline.processTag(), causing the RTE in SWFTimeline.buildLayers().

I committed a fix. Please let me know if that solves your problem.

Thanks for reporting, good find!

RickyAbell commented 13 years ago

Yip all working now :) Thanks for fixing it!