The ABC data is corrupt!
Yesterday, we were about ready and done with a nice shiny new Flash project, when right at the end (as always) our slideshows just stopped working. Loads of them, all over the site. The strange thing was that the first one seemed fine – whichever one you checked – then the rest were just dead. Plus, this was the same image loader class that had worked a treat on other projects, happily loading and displaying hundreds of images concurrently with no complaints. The images were all loading to 100%, but Event.COMPLETE just wasn’t firing, so the bitmaps never got smoothed or added to the stage. Weird.
Then we noticed this unusual error:
VerifyError: Error #1107: The ABC data is corrupt, attempt to read out of bounds.
It seemed to come up every time we rolled off anything at all, and it appeared to be this that was killing the slideshows. Couldn’t see any connection at all, but there it was. But it only happened in the 2D sections, not in the main PV3D world. Troubling. So it’s an error I’ve never seen that makes no apparent sense and doesn’t seem to refer to anything specific in the project at all. Marvellous.
After extensive googling and sifting through reams of comments, I noticed a couple of people were hinting at the same thing – anonymous functions, but only in comments from many player versions back, a couple of years ago. I’ve never used them, I thought – and never would. It’s just lazy. Then I remembered we’d used the trick of a stage-sized invisible MC with no mouse cursor but an empty roll over, to act as a screen to prevent click-through when in a section (an oldie but a goodie), and it was that empty ROLL_OVER that we’d done as possibly my first ever anonymous function, to save time and space and typing. And it made sense that this was causing the error not when rolling out of anything at all, but when rolling onto that background MC. Never again!
I’m still none-the-wiser about what the hell it means, what the hell ABC data is, why it couldn’t be verified or why it killed the completely unrelated COMPLETE events and nothing else. Even the youtube vids still streamed fine. Bizarre, but at least removing that anonymous function sorted it. Hopefully this might be of some help to someone, somewhere, someday. Might save them all that googling.
May 6th, 2009 by Addy P.
It's all about the flash | 2 Comments »


Now then fella. I’ve been reading through your posts and came across this problem you are (possibly) still having.
Anyway I was thinking the other day Ad: What would a programmer from 30 years ago think of what we do today?. I think we are more like analysts than programmers I think. That’s because of the language in which we write our applications. We write with language in the same domain as which we talk to our clients. ^_^
Flash is using the Adobe Virtual Machine. AVM2 can be ported to any system and executes Adobe Byte Code (ABC). Think of ABC as ASM, you know…. programming using a limited subset of instructions known as mnemonics. When you compile or “Publish” a flash movie your Actionscript is broken down and converted to ABC.
The specific ABC error you are getting there is a bad one sadly
That looks to be a fix for the engineers at Adobe, your coding habbits are not at fault.
I too googled the issue and found a similar issue relating to the use of Anonymous functions. (Which is a trait of OOP languages).
The idea (atleast how I see it) is; Don’t give your anonymous functions names. You really don’t have to anyway. I mean you could declare one like so:
var foo:Function = function():void { }
or like so:
foo.addEventListener(MouseEvent.CLICK, function(evt:*):void {} );
Eitherway would work without error. Naming them will cause an error probably due to bizzare calls to addresses in memory that don’t contain the correct call. Both examples of the anonymous function above can be destroyed so you are all set for GC.
Hope that helps mate!
A VerifyError is when your SWF-file is damaged in some way: like the Player cannot make sense of it’s contents. ABC means ActionScript ByteCode.
Looks like some compiler bug.. i’m trying to solve one right atm, and it’s insane :p