|
From: | Henry Minsky |
Subject: | [Gnash-dev] Re: OpenLaszlo & Gnash |
Date: | Wed, 14 Feb 2007 16:28:11 -0500 |
This code comes from SWFFile.java and is written using jgenerator.
The actionscript is compiled by our script compiler. It seems there
is an 'off-by-one' bug here? I note that our script compiler always
adds a NONE (0x0) opcode at the end of every script it compiles, and
that jgenerator takes the program length from the length of the byte-
array the script compiler returns. Is it possible that there is some
redundancy between the 'null termination' of the script and the
length field?
On 2007-02-14, at 15:00 EST, Henry Minsky wrote:
> I disassembled the swf using swftools-0.4.2 swfdump and it does
> seem to be
> confused at that tag judging by the '???' it is emitting.
>
>
> [01a] 381 PLACEOBJECT2 places id 0005 at depth 0002 name
> "frameupdate"
> global flags: 00f0
> flags 00000040 [key down], 84 bytes actioncode
> ( 38 bytes) action: Constantpool(5 entries)
> String:"gotKeyDown" String:"getCode" String:"LzKeys" String:"_root"
> String:"Key"
> ( 7 bytes) action: Push int:0 Lookup:4 ("Key")
> ( 0 bytes) action: GetVariable
> ( 2 bytes) action: Push Lookup:1 ("getCode")
> ( 0 bytes) action: CallMethod
> ( 7 bytes) action: Push int:1 Lookup:3 ("_root")
> ( 0 bytes) action: GetVariable
> ( 2 bytes) action: Push Lookup:2 ("LzKeys")
> ( 0 bytes) action: GetMember
> ( 2 bytes) action: Push Lookup:0 ("gotKeyDown")
> ( 0 bytes) action: CallMethod
> ( 0 bytes) action: Pop
> ( 0 bytes) action: End
> flags 00008000 [???], 20992 bytes actioncode
> ( 0 bytes) action: End
> flags 05002488 [mouse move][key up][???],
> 1953457920 bytes
> actioncode
> ( 0 bytes) action: ToString
> ( 0 bytes) action: BitURShift
> ( 0 bytes) action: unknown[79]
> ( 0 bytes) action: GetMembers?
> ( 0 bytes) action: unknown[70]
> ( 0 bytes) action: End
> flags 43746567 [on load][enter frame][unload][mouse
> up][key
> down][data][???], 6644847 bytes actioncode
> ( 0 bytes) action: PushDuplicate
> ( 0 bytes) action: unknown[7a]
> ( 0 bytes) action: ToString
> ( 0 bytes) action: BitURShift
> ( 0 bytes) action: unknown[79]
> ( 0 bytes) action: unknown[73]
> ( 0 bytes) action: End
> flags 6f6f725f [on load][enter frame][unload][mouse
> move][mouse down][key down][???], 1699414132 bytes actioncode
> ( 0 bytes) action: unknown[79]
> ( 0 bytes) action: End
> flags 07000796 [enter frame][unload][mouse down][key
> up][data][???], 0 bytes actioncode
> ( 0 bytes) action: ToggleQuality
> ( 0 bytes) action: NextFrame
> ( 0 bytes) action: GetVariable
> ( 2 bytes) action: Push Lookup:1
> ( 0 bytes) action: CallMethod
> ( 7 bytes) action: Push int:1 Lookup:3
> ( 0 bytes) action: GetVariable
> ( 2 bytes) action: Push Lookup:2
> ( 0 bytes) action: GetMember
> ( 2 bytes) action: Push Lookup:0
> ( 0 bytes) action: CallMethod
> ( 0 bytes) action: Pop
> ( 0 bytes) action: End
> flags 00001000 [???], 20224 bytes actioncode
> ( 0 bytes) action: End
> flags 04003088 [mouse move][key up][???],
> 1299860480 bytes
> actioncode
> ( 0 bytes) action: unknown[6f]
> ( 0 bytes) action: BitRShift
> ( 0 bytes) action: BitURShift
> ( 0 bytes) action: StackSwap
> ( 0 bytes) action: BitOr
> ( 0 bytes) action: unknown[6e]
> ( 0 bytes) action: BitOr
> ( 0 bytes) action: Less3?
> ( 0 bytes) action: BitURShift
> ( 0 bytes) action: unknown[72]
> ( 0 bytes) action: End
> flags 4d776172 [enter frame][mouse down][mouse up][key
> down][data][???], 1702065519 bytes actioncode
> ( 0 bytes) action: TargetPath
> ( 0 bytes) action: unknown[76]
> ( 0 bytes) action: BitURShift
> ( 0 bytes) action: unknown[6e]
> ( 0 bytes) action: unknown[74]
> ( 0 bytes) action: End
> flags 6f6d6e6f [on load][enter frame][unload][mouse
> move][mouse up][key down][???], 1684370293 bytes actioncode
> ( 0 bytes) action: unknown[6f]
> ( 0 bytes) action: unknown[77]
> ( 0 bytes) action: unknown[6e]
> ( 0 bytes) action: End
> flags 6f6f725f [on load][enter frame][unload][mouse
> move][mouse down][key down][???], 160825460 bytes actioncode
> ( 0 bytes) action: End
> flags 01070208 [mouse move][???], 134217728 bytes
> actioncode
> ( 0 bytes) action: unknown[03]
> ( 0 bytes) action: GetVariable
> ( 2 bytes) action: Push Lookup:0
> ( 0 bytes) action: GetMember
> ( 2 bytes) action: Push Lookup:1
> ( 0 bytes) action: CallMethod
> ( 0 bytes) action: Pop
> ( 0 bytes) action: End
> flags 00002000 [???], 19712 bytes actioncode
> ( 0 bytes) action: End
> flags 04002e88 [mouse move][key up][???],
> 1299860480 bytes
> actioncode
> ( 0 bytes) action: unknown[6f]
> ( 0 bytes) action: BitRShift
> ( 0 bytes) action: BitURShift
> ( 0 bytes) action: StackSwap
> ( 0 bytes) action: BitOr
> ( 0 bytes) action: unknown[6e]
> ( 0 bytes) action: BitOr
> ( 0 bytes) action: Less3?
> ( 0 bytes) action: BitURShift
> ( 0 bytes) action: unknown[72]
> ( 0 bytes) action: End
> flags 4d776172 [enter frame][mouse down][mouse up][key
> down][data][???], 1702065519 bytes actioncode
> ( 0 bytes) action: TargetPath
> ( 0 bytes) action: unknown[76]
> ( 0 bytes) action: BitURShift
> ( 0 bytes) action: unknown[6e]
> ( 0 bytes) action: unknown[74]
> ( 0 bytes) action: End
> flags 6f6d6e6f [on load][enter frame][unload][mouse
> move][mouse up][key down][???], 1969582965 bytes actioncode
> ( 0 bytes) action: unknown[70]
> ( 0 bytes) action: End
> flags 6f6f725f [on load][enter frame][unload][mouse
> move][mouse down][key down][???], 160825460 bytes actioncode
> ( 0 bytes) action: End
> flags 01070208 [mouse move][???], 134217728 bytes
> actioncode
> ( 0 bytes) action: unknown[03]
> ( 0 bytes) action: GetVariable
> ( 2 bytes) action: Push Lookup:0
> ( 0 bytes) action: GetMember
> ( 2 bytes) action: Push Lookup:1
> ( 0 bytes) action: CallMethod
> ( 0 bytes) action: Pop
> ( 0 bytes) action: End
> [027] 4 DEFINESPRITE defines id 0006
> [000] 0 END
>
>
> On 2/14/07, strk < address@hidden> wrote:
>>
>> On Wed, Feb 14, 2007 at 01:30:12PM -0500, Henry Minsky wrote:
>> > The structure of a Laszlo application is that the runtime LFC
>> library is
>> > compiled entirely by the script compiler, it is just a big
>> action block.
>> >
>> > Then, the user's application is also compiled by the script
>> compiler
>> into a
>> > big action block.
>> >
>> > Then those are inserted into a kind of boilerplate framework
>> which is
>> > generated using the old JGenerator library which we've modified
>> somewhat.
>> > That is generated by the source code in
>> > WEB-INF/lps/server/src/org/openlaszlo/compiler/SWFFile.java, and
>> consists of
>> > various resources and trampolines into the LFC, such as buttons for
>> catching
>> > click events, keyboard events, and a video object which can be
>> attached
>> to
>> > play video.
>> >
>> > The question I have is whether the bad opcode is coming from our
>> script
>> > compiler, or whether it comes in somehow when the app is
>> assembled by
>> > placing the compiled script code into the application framework.
>>
>> The Gnash-detected error is in a PLACEOBJECT2 tag events . You can
>> also
>> see tha name of the instanciated character (frameupdate) :
>>
>> SWF[444]: tag type = 26, tag length = 381
>> place_object_2
>> depth = 2
>> char id = 5
>> name = frameupdate
>> actions: flags = 0xF0
>> 20:15:11: MALFORMED SWF: swf_event::read(), event_length = 84, but
>> read
>> 83. Skipping excessive bytes.
>> 20:15:11: MALFORMED SWF: swf_event::read(), event_length = 82, but
>> read
>> 81. Skipping excessive bytes.
>> 20:15:11: MALFORMED SWF: swf_event::read(), event_length = 79, but
>> read
>> 78. Skipping excessive bytes.
>> 20:15:11: MALFORMED SWF: swf_event::read(), event_length = 77, but
>> read
>> 76. Skipping excessive bytes.
>>
>> I'm both interested in making sure Gnash is fail-safe against this
>> malformation
>> (the proprietary player is) and improve Gnash support for the
>> ActionScript
>> part, which
>> is also unsupported currently.
>> The ActionScript failure is about a 'prototype' member being
>> undefined
>> (namely: prototype.prototype ).
>>
>> --strk;
>>
>
>
>
> --
> Henry Minsky
> Software Architect
> address@hidden
[Prev in Thread] | Current Thread | [Next in Thread] |