gnash-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-dev] Re: OpenLaszlo & Gnash


From: P T Withington
Subject: [Gnash-dev] Re: OpenLaszlo & Gnash
Date: Wed, 14 Feb 2007 15:34:34 -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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]