bugGnash - The GNU Flash player - Bugs: bug #33521, SWF8 video from registroimprese.it...

 
 

bug #33521: SWF8 video from registroimprese.it doesn't work

Submitter:  Sandro Santilli <strk>
Submitted:  Sat 11 Jun 2011 08:24:44 AM UTC
   
 
Category:  ActionScript Severity:  3 - Normal
Release:  master Status:  Fixed
Privacy:  Public Assigned to:  strk
Open/Closed:  Closed
* Mandatory Fields

Add a New Comment Rich Markup
   

Jump to the original submission

Mon 18 Jul 2011 10:47:23 PM UTC, comment #25: 

With 9cecf8ad8f2d5f6e351929785b833ac7d560b26a we make a double scan of the live characters in movie_root and queue onLoad with the second scan. This fixed 6 tests (all the failing ones) in ActionOrderTest5.swf w/out breaking anything else.

This bug if also fixed with that commit.

Unfortunately we don't have those 2 nice successes that we were
having with the other attempt in registerClassTest2.c, but I've verified (manually) that the successes were kind of cheating ones as we were postponing onLoad to the next advance while they are expected in the same advance with the rest.

Anyway, 6 successes (+ this bug) and no failures was worth pushing. This also simplified the code in MovieClip::construct a little bit.

Sandro Santilli <strk>
Group Member
Sun 17 Jul 2011 01:46:39 PM UTC, comment #24: 

Note that the 3 unexpected failures are all in the ActionOrderTest5.swf movie, which also has 3 unexpected successes.


Sandro Santilli <strk>
Group Member
Sun 17 Jul 2011 01:34:57 PM UTC, comment #23: 

Pushed by new hopes, I reassign to myself.

Sandro Santilli <strk>
Group Member
Sun 17 Jul 2011 01:33:36 PM UTC, comment #22: 

Postponing the onLoad call for movieclip when there are not clip events fixes 5 tests in our testsuite, breaks 3 tests and fixes this movie. Patch attached.

Sandro Santilli <strk>
Group Member
Thu 14 Jul 2011 06:12:05 PM UTC, comment #21: 

I'm burned on this, so making this available to others, if anyone is willing to try it...

Sandro Santilli <strk>
Group Member
Wed 13 Jul 2011 05:46:07 PM UTC, comment #20: 
Sandro Santilli <strk>
Group Member
Wed 13 Jul 2011 01:48:40 PM UTC, comment #19: 

Ok, it was a bug in my flasm syntax, updated traces, streamlined and showing the order execution issue:

PP:

 _level0.slide0__color_mc.TSWFItem6.frame0 actions enter
 entrata.swf

 _level0.slide0__color_mc.TSWFItem6.onLoad enter
 LoadSWF enter

Gnash:

 _level0.slide0__color_mc.TSWFItem6.onLoad enter
 LoadSWF enter

 _level0.slide0__color_mc.TSWFItem6.frame0 actions enter
 entrata.swf



Sandro Santilli <strk>
Group Member
Wed 13 Jul 2011 01:33:45 PM UTC, comment #18: 

8666:1] 1049 DEBUG: Sending onLoad event for clip _level0.slide0__color_mc.TSWFItem6
8666:1] 1049 TRACE: _level0.onLoad enter

Gnash says:

 9918:1] 1039 DEBUG: Sending onLoad event for clip _level0.slide0__color_mc.TSWFItem6
 9918:1] 1039 TRACE: _level0.onLoad enter
 ...
 9918:1] 1039 DEBUG: Returned from sending onLoad event for clip  _level0.slide0__color_mc.TSWFItem6


So it's actually the TSWFItem6 being called onLoad on, but 'this' in function body resolves to _level0... odd

Sandro Santilli <strk>
Group Member
Wed 13 Jul 2011 12:17:56 PM UTC, comment #17: 

Uhm... onLoad is not _level0.onLoad but rather a method
of _global.captivate.Veela_AS2.rdSwfLoader.prototype:


  R1 = function () {
    super();
  };
  captivate.Veela_AS2.rdSwfLoader = R1;
  ...
  R2 = R1.prototype;
  ...
  R2.onLoad = function () {
    trace(this+'.onLoad enter');
    ...
  }

So this all thing might have to do with prototypes and registerClass... (indeed I couldn't handle to produce a testcase showing gnash wrong about onLoad execution order)

Sandro Santilli <strk>
Group Member
Wed 13 Jul 2011 11:53:30 AM UTC, comment #16: 

Oops. I meant:

PP:
 
 _level0.slide0__color_mc.TSWFItem6.frame0 actions enter
 entrata.swf
 
 _level0.onLoad enter
 LoadSWF enter

Gnash:

 _level0.onLoad enter
 LoadSWF enter

 _level0.slide0__color_mc.TSWFItem6.frame0 actions enter
 entrata.swf

Sandro Santilli <strk>
Group Member
Wed 13 Jul 2011 10:00:14 AM UTC, comment #15: 

Alright, it's level0.onLoad (user-defined) being invoked _before frame0 actions of a child movie:

PP:

 _level0.init actions (93) enter
 _level0.init actions (93) exit

 _level0.loading_mc.onEnterFrame
 _level0.loading_mc.onEnterFrame exit

 _level0.onLoad enter
 LoadSWF enter

 _level0.slide0__color_mc.TSWFItem6.frame0 actions enter
 entrata.swf

Gnash:


 _level0.init actions (93) enter
 _level0.init actions (93) exit

 _level0.loading_mc.onEnterFrame
 _level0.loading_mc.onEnterFrame exit

 _level0.onLoad enter
 LoadSWF enter

 _level0.slide0__color_mc.TSWFItem6.frame0 actions enter
 entrata.swf

You can see the proper URL (entrata.swf) is set in frame0 actions of 'slide0__color_mc'.'TSWFItem6' child.

Sandro Santilli <strk>
Group Member
Tue 12 Jul 2011 09:00:10 PM UTC, comment #14: 

The trace of "entrate.swf" is in a DOACTION of character 93, right after a PLACEOBJECT of character 92.

Character 92 is a sprite containing a single END tag, but advertised to have 108 frames (?!?)

There's no INITACTION for character 92, but there's one for character 93. Such initaction is the one tracing the 'registered captivate.Veela...' message.

For some reason gnash is executing something else between the INITACTION and the DOACTION block.

Sandro Santilli <strk>
Group Member
Tue 12 Jul 2011 08:07:57 PM UTC, comment #13: 

After long work on constant pool that part is fixed, but the movie still doesn't work. Next problem seems to be action execution order, where traces I get are:

For PP:

 registered captivate.Veela_AS2.rdSwfLoader class to 1403d43_2 movie
 entrata.swf
 [object Object]

For Gnash:

 registered captivate.Veela_AS2.rdSwfLoader class to 1403d43_2 movie
 [object Object]
 entrata.swf

Note that load attempt happens, in Gnash, before '[object Object]' and 'entrata.swf' are traced. This explains why it attempts to load 'undefined' rather than 'entrata.swf'


Sandro Santilli <strk>
Group Member
Sun 10 Jul 2011 11:52:42 AM UTC, comment #12: 

A new test from Jan Flanders (attached) seems to suggest the scope of ConstantPools doesn't cross timelines (so dicts defined in a movieclip aren't accessible by the main movie).

The test should be converted into an automated one.

Jan's test (the URL may be temporary): http://www.haxer.be/guests/gnash/two-frame-swf-cpool-in-mc.zip

Sandro Santilli <strk>
Group Member
Thu 07 Jul 2011 12:55:00 PM UTC, comment #11: 

57974d2 adds the test for anonymous function, and fixes the runner which was broken in previous commit.

Seems to be about the time for a fix.

Sandro Santilli <strk>
Group Member
Thu 07 Jul 2011 12:41:22 PM UTC, comment #10: 

I've finally handled to produce an automated testcase for this.
Pushed commit c67f4af in master.

Basically when a function is executed it uses the constant pool which was available at time of definition.
The test doesn't check if the same applies to anonymous functions,
should be improved (dunno when I'll have time).

The test fails, and we expect that.

Sandro Santilli <strk>
Group Member
Wed 06 Jul 2011 11:32:11 PM UTC, comment #9: 

Alright, here's the thing:


PC:370 - EX: ActionPushData ("onEnterFrame called: ")
        0) type=string, value=[string:onEnterFrame called: ]

PC:396 - EX: ActionPushData (dict_lookup[11])
        0) type=dict8, value=[string:inAutoPlayState]

PC:401 - EX: ActionGetVariable
-- get var: inAutoPlayState=[bool:false]


I do can find a constant pool where 11:this, but evidently we're getting the wrong one (where 11:inAutoPlayState)

Sandro Santilli <strk>
Group Member
Wed 06 Jul 2011 11:21:27 PM UTC, comment #8: 

NOTE that the movie seems to be produced using the Captivate adobe tool, so fixing this might fix a set of contents.

Sandro Santilli <strk>
Group Member
Wed 06 Jul 2011 11:15:11 PM UTC, comment #7: 

This (SOC_800x600.swf) is actually an SWF8, but is also bogus when changed to 7...

Sandro Santilli <strk>
Group Member
Wed 06 Jul 2011 10:57:56 PM UTC, comment #6: 

The call to onEnterFrame seems to be performed by a 'super.onEnterFrame' snippet, where super=undefined and this=_level0

Sandro Santilli <strk>
Group Member
Wed 06 Jul 2011 10:45:36 PM UTC, comment #5: 

Uhm:
pp: onEnterFrame called: _level0
gn: onEnterFrame called: false

Now this seems a very likely culprit here.
And it's surprising no test in testsuite exposes such a bug.

That's pretty much:

function onEnterFrame () {
 trace("onEnterFrame called: " + this);
}

Sandro Santilli <strk>
Group Member
Wed 06 Jul 2011 10:15:23 PM UTC, comment #4: 

I attach the current state of the flasm source I'm playing with.
Note that simply playing SOC_800x600.swf in isolation is enough to detect the difference between PP and Gnash.

PP shows something (ComUnica StarWeb something) and traces something like:

 registered captivate.Veela_AS2.rdSwfLoader class to 1403d43_2  movie
 entrata.swf
 startSlide (base) called
 onEnterSlide called
 OnSlideEnter called
 Branching::script:;;
 deepak branching : scripteval:[object Object];
 doPlay called
 ...

Gnash never gets to "startSlide (base) called" message.


Sandro Santilli <strk>
Group Member
Wed 29 Jun 2011 01:56:07 PM UTC, comment #3: 

Note that you'll need http://www.registroimprese.it/dama/comc/comc/IT/cu/tutorial/MDNew/SOC_800x600_skin.swf to have it fully functional. This one will load the one w/out _skin suffix which will have the actual content. Downloading both should give you a working offline setup.

The problem seems to be with ActionScript setting a variable and not finding it anymore at time of usage. The variable is set using ActionVarEquals, with AS looking like:

  var m_chidSwfName = 'entrata.swf';

in a DOACTION block.
The attempt to retrive it looks like this:

    R2.LoadSWF = function () {
    var R2;
    if( this.childswf_mc==null || this.childswf_mc==undefined ) {
      this.createLoader();
    }
    if( this.m_swf_mc==null || this.m_swf_mc==undefined ) {
      R2 = this.getLoadBase()+this.m_chidSwfName;
      this.m_mcLoader.loadClip(R2,this.childswf_mc);
      this.m_swf_mc = this.childswf_mc;
      this.stop();
    }
  };


Sandro Santilli <strk>
Group Member
Sat 11 Jun 2011 08:26:23 AM UTC, comment #2: 
Sandro Santilli <strk>
Group Member
Sat 11 Jun 2011 08:25:25 AM UTC, comment #1: 

This was tested with:
Gnash 0.8.10dev (master-20418-b20c9d2)

Note that there's a 100% CPU in use during the playback

Sandro Santilli <strk>
Group Member
Sat 11 Jun 2011 08:24:44 AM UTC, original submission:  

This is a video tutorial about how to tell the Italian Public Administration that you changed something about your business:

http://www.registroimprese.it/dama/comc/comc/IT/cu/tutorial/MDNew/SOC_800x600.htm

Doesn't work with Gnash. It's an SWF7.

The Italian PA sucks pretty hard generally. The process is really hard so I'm not surprised it takes a movie to understand. Must be a  comedy...

Sandro Santilli <strk>
Group Member

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by strk (Submitted the item)
  •  

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

    Only logged-in users can vote.

     

    Follow 13 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2011-07-29 strk StatusReady For Test Fixed
        Open/ClosedOpen Closed
    2011-07-18 strk StatusIn Progress Ready For Test
    2011-07-17 strk StatusConfirmed In Progress
        Assigned toNone strk
    2011-07-17 strk Attached File- Added 0001-Postpone-calling-onLoad-to-next-advance-if-no-clip-e.patch, #23667
    2011-07-14 strk StatusIn Progress Confirmed
        Assigned tostrk None
    2011-07-06 strk SummarySWF7 video from registroimprese.it doesn\'t work SWF8 video from registroimprese.it doesn't work
    2011-07-06 strk StatusConfirmed In Progress
        Assigned toNone strk
    2011-06-29 strk CategoryNone ActionScript
        StatusNone Confirmed

    Back to the top

    Powered by Savane 3.13-4448.
    Corresponding source code