bugGnash - The GNU Flash player - Bugs: bug #42395, No respons from panopticlick site...

 
 

bug #42395: No respons from panopticlick site when gnash is activated

Submitter:  Jean Daux <jeandaux>
Submitted:  Tue 20 May 2014 07:19:59 PM UTC
   
 
Category:  plugin Severity:  3 - Normal
Release:  None Status:  Fixed
Privacy:  Public Assigned to:  strk
Open/Closed:  Closed
* Mandatory Fields

Add a New Comment Rich Markup
   

Jump to the original submission

Mon 30 Jan 2017 04:37:53 PM UTC, comment #32: 

A bug for an XFAILED is still good to have

Sandro Santilli <strk>
Group Member
Sat 28 Jan 2017 05:29:36 PM UTC, comment #31: 

As the slash-colon GetVariable() test is now added and checked, this bug could be considered as fixed.

Question: Is the one XFAILED test alone warrant another bug report? Or just leaving it as XFAILED is enough?

Gnash: 0.8.11dev (git 36028f4 28-Jan-2016 07:09:30 GMT)
Flash Player: 11.2.203.491 (NPAPI binary)
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Mon 23 Jan 2017 04:39:46 PM UTC, comment #30: 

See patch #9234 for an automated version of `getvariable-slashcolon.zip` test.

As soon as the patch is applied in the mainline, this bug could be
marked as fixed; I will try to file the problem about XFAILED test
as a separate entry.

Gnash: 0.8.11dev (patched against git 2b3bded 21-Jul-2016)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Mon 15 Feb 2016 10:48:15 AM UTC, comment #29: 

Sorry, I'm taking it back. The fingerprint test completes and fingerprint table is printed. I just forgot to install the updated code.

Sandro Santilli <strk>
Group Member
Mon 15 Feb 2016 10:41:53 AM UTC, comment #28: 

NOTE: after applying  patch #8909 (as of commit 051aa9c34b69e1a0a1d2d75e3cf1db07fcea4006) the fingerprint test on panopticlick.eff.org still does not complete on my system.

Sandro Santilli <strk>
Group Member
Wed 10 Feb 2016 04:23:12 PM UTC, comment #27: 

I have made a patch which wires plugin's `GetVariable()` function to
Gnash's implementation of ActionGetVariable instruction: see patch #8908.

After applied the patch, you'd see that `fontlist.html` test is now showing
the expected result (empty string instead of `null`):

JavaScript calls Flash's GetVariable: OK (returned type string)
Font listing:


Note (as a reminder): The empty result is due to `TextField.getFontList()` being unimplemented.

`getvariable-slashcolon.html` test also showing a mostly-correct result:

PASSED: GetVariable call on "movievar" path should return a correct value
FAILED: GetVariable call on ":movievar" path should return a correct value ("null" != "This is movievar")
PASSED: GetVariable call on "/:movievar" path should return a correct value
PASSED: GetVariable call on "submovie:submovievar" path should return a correct value
PASSED: GetVariable call on "submovie/:submovievar" path should return a correct value
PASSED: GetVariable call on "submovie::submovievar" path should return a correct value
PASSED: GetVariable call on "/submovie:submovievar" path should return a correct value
PASSED: GetVariable call on "/submovie/:submovievar" path should return a correct value
PASSED: GetVariable call on "/submovie::submovievar" path should return a correct value
PASSED: GetVariable call on ":submovie:submovievar" path should return a correct value
PASSED: GetVariable call on ":submovie/:submovievar" path should return a correct value
PASSED: GetVariable call on ":submovie::submovievar" path should return a correct value
PASSED: GetVariable call on "submovie/nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "submovie/nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "submovie/nestedmovie::nestedmovievar" path should return a correct value
PASSED: GetVariable call on "submovie:nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "submovie:nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "submovie:nestedmovie::nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie/nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie/nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie/nestedmovie::nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie:nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie:nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie:nestedmovie::nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie/nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie/nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie/nestedmovie::nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie:nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie:nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie:nestedmovie::nestedmovievar" path should return a correct value


And EFF Panopticlick would now properly showing the fingerprint table too.
(Screenshot: Also, you'd see that "System Fonts" listing is empty,
which is expected, as Gnash's `TextField.getFontList()` is unimplemented.

Gnash: 0.8.11dev (patched against git 435d3e9 6-Feb-2016) NPAPI
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Wed 10 Feb 2016 02:56:34 PM UTC, comment #26: 

You can use "xcheck*" macros to commit a test before it passes.
The testing framework would then let you know whenever the test is fixed by code (reporting XPASS, unexpected success, and returning with an error code).

Just in case you want to provide the test before working on the fix.

Sandro Santilli <strk>
Group Member
Wed 10 Feb 2016 02:38:26 PM UTC, comment #25: 

I have done some experiment regarding the format of variable path,
and found that it looks very similar to ones used internally in
ActionScript's ActionGetVariable instruction.

Based on the experiment, I have made a test SWF/HTML file (via SWFTools's
swfc) which tries to access variable in root MovieClip, sub-MovieClip and
nested-MovieClip using `GetVariable()` plugin function with slash-colon
variable path.

This is text output of `getvariable-slashcolon.html` under browser with Flash Player:

PASSED: GetVariable call on "movievar" path should return a correct value
PASSED: GetVariable call on ":movievar" path should return a correct value
PASSED: GetVariable call on "/:movievar" path should return a correct value
PASSED: GetVariable call on "submovie:submovievar" path should return a correct value
PASSED: GetVariable call on "submovie/:submovievar" path should return a correct value
PASSED: GetVariable call on "submovie::submovievar" path should return a correct value
PASSED: GetVariable call on "/submovie:submovievar" path should return a correct value
PASSED: GetVariable call on "/submovie/:submovievar" path should return a correct value
PASSED: GetVariable call on "/submovie::submovievar" path should return a correct value
PASSED: GetVariable call on ":submovie:submovievar" path should return a correct value
PASSED: GetVariable call on ":submovie/:submovievar" path should return a correct value
PASSED: GetVariable call on ":submovie::submovievar" path should return a correct value
PASSED: GetVariable call on "submovie/nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "submovie/nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "submovie/nestedmovie::nestedmovievar" path should return a correct value
PASSED: GetVariable call on "submovie:nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "submovie:nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "submovie:nestedmovie::nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie/nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie/nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie/nestedmovie::nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie:nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie:nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on "/submovie:nestedmovie::nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie/nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie/nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie/nestedmovie::nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie:nestedmovie:nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie:nestedmovie/:nestedmovievar" path should return a correct value
PASSED: GetVariable call on ":submovie:nestedmovie::nestedmovievar" path should return a correct value


You'd see that all tests were passed.

This is text output of `getvariable-slashcolon.html` under browser with current Gnash:

PASSED: GetVariable call on "movievar" path should return a correct value
FAILED: GetVariable call on ":movievar" path should return a correct value ("null" != "This is movievar")
FAILED: GetVariable call on "/:movievar" path should return a correct value ("null" != "This is movievar")
FAILED: GetVariable call on "submovie:submovievar" path should return a correct value ("null" != "This is submovievar")
FAILED: GetVariable call on "submovie/:submovievar" path should return a correct value ("null" != "This is submovievar")
FAILED: GetVariable call on "submovie::submovievar" path should return a correct value ("null" != "This is submovievar")
FAILED: GetVariable call on "/submovie:submovievar" path should return a correct value ("null" != "This is submovievar")
FAILED: GetVariable call on "/submovie/:submovievar" path should return a correct value ("null" != "This is submovievar")
FAILED: GetVariable call on "/submovie::submovievar" path should return a correct value ("null" != "This is submovievar")
FAILED: GetVariable call on ":submovie:submovievar" path should return a correct value ("null" != "This is submovievar")
FAILED: GetVariable call on ":submovie/:submovievar" path should return a correct value ("null" != "This is submovievar")
FAILED: GetVariable call on ":submovie::submovievar" path should return a correct value ("null" != "This is submovievar")
FAILED: GetVariable call on "submovie/nestedmovie:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "submovie/nestedmovie/:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "submovie/nestedmovie::nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "submovie:nestedmovie:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "submovie:nestedmovie/:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "submovie:nestedmovie::nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "/submovie/nestedmovie:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "/submovie/nestedmovie/:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "/submovie/nestedmovie::nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "/submovie:nestedmovie:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "/submovie:nestedmovie/:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on "/submovie:nestedmovie::nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on ":submovie/nestedmovie:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on ":submovie/nestedmovie/:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on ":submovie/nestedmovie::nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on ":submovie:nestedmovie:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on ":submovie:nestedmovie/:nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")
FAILED: GetVariable call on ":submovie:nestedmovie::nestedmovievar" path should return a correct value ("null" != "This is nestedmovievar")


You'd see that all tests were failed except the one with bare variable name.

Test SWF, souce code, HTML container, screenshots, logs, and container-player
communication dump is attached as `getvariable-slashcolon.zip`.

Side note: I haven't created a plausible EBNF definition of the path yet;
the slash-colon part is quite straightforward, but it is complicated
when dot is in the mix.

Gnash: 0.8.11dev (git 435d3e9 6-Feb-2016)
Flash Player: 11.2 r202 (11.2.202.491) NPAPI binary
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386


(file #36293)

Nutchanon Wetchasit <nachanon>
Tue 09 Feb 2016 03:10:13 PM UTC, comment #24: 

Regarding EFF Panopticlick, only problem left in current Gnash's
`GetVariable(variablePath)` implementation is:

  • Gnash didn't resolve variable path in slash-colon notation correctly.


As a reference, this is text output from `fontlist.html` test on browser with current git version Gnash:

JavaScript calls Flash's GetVariable: Failed (returned type object)
Value: null


Gnash's debug output from the run (verbosity=2 + action error log):

79 DEBUG: gnash::GtkAggGlue::GtkAggGlue() enter
79 DEBUG: gnash::GtkAggGlue::GtkAggGlue() returning
79 DEBUG: virtual bool gnash::GtkAggGlue::init(int, char***) enter
79 DEBUG: virtual bool gnash::GtkAggGlue::init(int, char***) returning
82 DEBUG: gnash_canvas_size_allocate 200 200
82 DEBUG: virtual void gnash::GtkAggGlue::prepDrawingArea(GtkWidget*) enter
82 DEBUG: virtual void gnash::GtkAggGlue::prepDrawingArea(GtkWidget*) returning
82 DEBUG: virtual gnash::Renderer* gnash::GtkAggGlue::createRenderHandler() enter
83 DEBUG: Framebuffer pixel format is BGRA32 (little-endian host)
83 DEBUG: virtual gnash::Renderer* gnash::GtkAggGlue::createRenderHandler() returning
83 DEBUG: virtual void gnash::GtkAggGlue::setRenderHandlerSize(int, int) enter
83 DEBUG: virtual void gnash::GtkAggGlue::setRenderHandlerSize(int, int) returning
83 DEBUG: /home/window/Desktop/fontlist/ appended to local sandboxes
84 SECURITY: Extensions disabled
84 DEBUG: Advance interval timer set to 10 ms (~ 100 FPS)
84 DEBUG: Setting allowscriptaccess to 2
84 DEBUG: Loading native class MovieClip
85 TRACE: Fetching list of available fonts...
85 DEBUG: Loading native class TextField
85 DEBUG: Loading native class AsBroadcaster
85 UNIMPLEMENTED: TextField.getFontList()
85 TRACE: Font listing:
85 DEBUG: void gnash::Gui::resize_view(int, int) enter
85 DEBUG: void gnash::Gui::resize_view(int, int) returning
127 DEBUG: gnash_canvas_size_allocate 320 240
127 DEBUG: virtual void gnash::GtkAggGlue::setRenderHandlerSize(int, int) enter
128 DEBUG: virtual void gnash::GtkAggGlue::setRenderHandlerSize(int, int) returning
128 DEBUG: virtual void gnash::GtkAggGlue::setRenderHandlerSize(int, int) enter
128 DEBUG: virtual void gnash::GtkAggGlue::setRenderHandlerSize(int, int) returning
128 DEBUG: void gnash::Gui::resize_view(int, int) enter
128 DEBUG: void gnash::Gui::resize_view(int, int) returning
2948 DEBUG: There are 104 bytes in the network buffer
2948 DEBUG: bool gnash::movie_root::processInvoke(gnash::ExternalInterface::invoke_t*) enter
2948 DEBUG: Processing GetVariable call from the Browser.
2948 DEBUG: Attempt to write response to ExternalInterface requests fd 4
2948 DEBUG: bool gnash::movie_root::processInvoke(gnash::ExternalInterface::invoke_t*) returning
9954 DEBUG: Main loop ended, cleaning up
9954 DEBUG: ~Player - _movieDef refcount: 2 (1 will be dropped now)
9954 DEBUG: ~Gui - _movieDef refcount: 1


Gnash: 0.8.11dev (git 435d3e9 6-Feb-2016)
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Tue 09 Feb 2016 03:06:24 PM UTC, comment #23: 

EFF Panopticlick site have been updated to the new version,
and is (luckily) still affected by this issue; the basic tracking test
is run successfully, but fingerprint test did not finish; when
"Show full results for fingerprinting" was clicked on basic result
page, it just stuck, not giving the fingerprinting result table.

Following is the message from browser's error console:

Error: fonts is null
Source File: https://panopticlick.eff.org/static/fetch_whorls.js
Line: 85


Gnash: 0.8.11dev (git 435d3e9 6-Feb-2016)
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Sat 19 Dec 2015 04:51:40 PM UTC, comment #22: 

For the issue of `GetVariable()` on `undefined` variable under SWF5,
it is now posted separately as bug #46719.

Nutchanon Wetchasit <nachanon>
Sat 19 Dec 2015 08:59:00 AM UTC, comment #21: 

For testing against Flash Player, `js2flash-auto-v2.tar.gz`
(file #35071 which corresponds to `extcommtests-runner` bug #37223)
and `extgetvariable-auto.tar.gz` (file #35743 which corresponds to
`extgetvariable_testrunner`), both come with semi-automated HTML testrunner
which could be run and give a list of PASSED/FAILED test on browser with
either Gnash or Adobe Flash Player plugin, as seen in bug #46115.

Including them in the same folder as the corresponding SWF might
address the issue of testing against reference player.

I'm not sure how to automate them further though.

Nutchanon Wetchasit <nachanon>
Sat 19 Dec 2015 08:03:00 AM UTC, comment #20: 

Patch #8835 is now in the master branch. I'm a bit concerned about not seeing an easy way to verify test correctness against the proprietary player, if you can think of a way to make that easy it would be helpful.

Sandro Santilli <strk>
Group Member
Sat 19 Dec 2015 06:05:23 AM UTC, comment #19: 

Integrated version of `extgetvariable-auto.tar.gz` is now included,
see patch #8835.

I also re-checked the testability of bug #45840, I was wrong. The SWF5 issue
do interfere, as bug #45840 relies on one of the check that gives XFAIL
on SWF5. The testrunner log output is different though:

Output from `testrun.log` when failed because of bug #45840 itself:

XFAIL: extgetvariable_testrunner_v5: Gnash should return a correct value from GetVariable call on unassigned variable ("<null/>" != "<string></string>")


Output from `testrun.log` when failed because of the forementioned SWF5 issue:

XFAIL: extgetvariable_testrunner_v5: Gnash should return a correct value from GetVariable call on unassigned variable ("<string>undefined</string>" != "<string></string>")


Gnash: 0.8.11dev (patched against git c11ec51 18-Dec-2015)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Fri 18 Dec 2015 02:25:13 PM UTC, comment #18: 

As tools may be unavailable at build time, keeping tests dependent on different tools separated allows for easily enabling/disabling a whole directory based on availability of the tools.

For this reason, I suggest you make separate test runners for the separately created tests.

Sandro Santilli <strk>
Group Member
Fri 18 Dec 2015 02:21:51 PM UTC, comment #17: 

@strk:
Regarding the newline fix, no change was needed in the test. Thanks.

Anyway, if one automated test runner needs an SWF that is built using
multiple tools, which folder on Gnash testsuite it is supposed to be in?

The GetVariable() return type test (`extgetvariable-auto.tar.gz`) was
originally intended to be built with libming's makeswf. But the next test on
GetVariable() slash-dot-colon path notation requires a nested MovieClip,
which needs SWFTools's SWFC tool.

I was considering to port the GetVariable() return type test to SWFC.
But I'd like to know which is preferred between:

  • combining those tests together (as they test the same function)? or..
  • make separate test runners (as they use different tool)?


Nutchanon Wetchasit <nachanon>
Fri 18 Dec 2015 02:17:40 PM UTC, comment #16: 

I have found some behavior discrepancy in GetVarible() return type test
(`extgetvariable-auto.zip`) under SWF5, regarding unassigned and
assigned-undefined variable (reference player returned those as
empty string instead of a string "undefined"). So, some of the tests
would be marked as XFAIL on that SWF version.

In any case, this issue does not affect testability of bug #45840.

Adobe Flash Player: 11.2 r202 (11.2.202.491) NPAPI binary
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Tue 15 Dec 2015 07:26:06 AM UTC, comment #15: 

I've pushed your patch for #46155, let me know if you need to change anything in this testcase in order to use the fix.

Sandro Santilli <strk>
Group Member
Mon 14 Dec 2015 05:29:00 PM UTC, comment #14: 

I have made an automated (but non-integrated) version of `getvariable-v3.html`
test, using host container emulation approach similar to `extcommtests-runner`
except that it does the end-of-test signature check at the beginning to avoid
race condition, and does not wait for Gnash to terminate; the test runner will
terminate Gnash when it got all the results.

The automated test (including HTML-based manual test runner) is attached as
`extgetvariable-auto.zip`.

It is currently giving `PASSED` output, but the test requires very long time
to run (around 1.5 minute) and might show some intermittent failure, due to
bug #46115 (container communication missing newlines) making the test runner
rely on read timeout provision on every test it perform.

PASSED: Gnash-side code should be successfully run
PASSED: Gnash should return a correct value from GetVariable call on string
PASSED: Gnash should return a correct value from GetVariable call on integer
PASSED: Gnash should return a correct value from GetVariable call on floating point
PASSED: Gnash should return a correct value from GetVariable call on infinity floating point
PASSED: Gnash should return a correct value from GetVariable call on negative infinity floating point
PASSED: Gnash should return a correct value from GetVariable call on non-number floating point
PASSED: Gnash should return a correct value from GetVariable call on boolean
PASSED: Gnash should return a correct value from GetVariable call on null
PASSED: Gnash should return a correct value from GetVariable call on unassigned variable
PASSED: Gnash should return a correct value from GetVariable call on variable with undefined value
PASSED: Gnash should return a correct value from GetVariable call on non-existent variable
PASSED: Gnash should return a correct value from GetVariable call on array variable
PASSED: Gnash should return a correct value from GetVariable call on object variable
PASSED: Gnash should return a correct value from GetVariable call on object variable with custom toString()
PASSED: Gnash should return a correct value from GetVariable call on function variable
PASSED: There should be 16 tests run


If bug #46115 is fixed, test time would be reduced to around 1.5 sec.

Gnash: 0.8.11dev (git 95763ce 8-Dec-2015)
System: Debian GNU/Linux 7.0 Wheezy i386


(file #35743)

Nutchanon Wetchasit <nachanon>
Thu 24 Sep 2015 03:48:58 PM UTC, comment #13: 

The attached `getvariable-v3.zip` is an improved version of `getvariable.zip` test;
includes function variable check, undeclared V.S. unassigned V.S. `=undefined` distinction
(as in bug #45840), and custom `Object.toString()` check.

Current git version of Gnash now run this test correctly.

Gnash: 0.8.11dev (git f0f66ce 23-Sep-2015) NPAPI
Adobe Flash Player: 11.2 r202 (11.2.202.491) NPAPI binary
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386

(file #34974)

Nutchanon Wetchasit <nachanon>
Fri 28 Aug 2015 01:25:51 PM UTC, comment #12: 

For the limitation that caused Gnash's `GetVariable()` to return `null` object
when encountered a variable with value `undefined`, it is specific to
an unassigned variable declared on the timeline.

Now submitted as a separate issue: bug #45840.

Nutchanon Wetchasit <nachanon>
Tue 25 Aug 2015 05:56:34 PM UTC, comment #11: 

In commit f341372f201dc995d2c893a8e06670f673058897 I sligthly improved the scriptable-test.html file (still not automated and not so easy to setup).

Sandro Santilli <strk>
Group Member
Tue 25 Aug 2015 05:25:25 PM UTC, comment #10: 

array from getFontList was pushed.
Please see plugin/npapi/scriptable-test.html and other test files under that dir which may help with writing tests (not sure which if any of those is automated, we'd better have automated ones).

Sandro Santilli <strk>
Group Member
Tue 25 Aug 2015 04:13:37 PM UTC, comment #9: 

For the issue of `TextField.getFontList()` being unimplemented, currently
the method returns `undefined`, which would still cause an error in
Panopticlick code (as it was passed to JavaScript as `null`).

Changing `TextField.getFontList()` to return an empty Array
instead of `undefined` (but still emit `UNIMPLEMENTED` log message) would be
an easiest way fix errors in Panopticlick and possibly other site
that tries to use this feature, without actually implementing
the whole functionality.

Patch included (2 of 2), see patch #8723 comment 2

Gnash: 0.8.11dev (patched against git e04f9e2 24-Aug-2015, on top of patch #8721)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Mon 24 Aug 2015 08:23:46 AM UTC, comment #8: 

For the problem of `TextField.getFontList()` not being declared properly.
I've checked around and found that the error was rooted from
`this` pointer check done at the start of `textfield_getFontList()` function
in `libcore/asobj/TextField_as.cpp`.

The check shouldn't be there as `TextField.getFontList()` is a static method;
`this` pointer inside it is not supposed to be a valid Object instance.

Patch included (1 of 2, see patch #8723), to remove this check.

After applying the patch and run `fontlist.swf` test, ActionScript error on
method call is now gone and `UNIMPLEMENTED` message is now visible:

115 ACTIONSCRIPT ERROR: The 'var whatever' syntax in timeline context is a no-op.
116 TRACE: Fetching list of available fonts...
116 UNIMPLEMENTED: TextField.getFontList()
116 TRACE: Font listing: undefined


Gnash: 0.8.11dev (patched against git 88f86a3 19-Aug-2015, on top of patch #8721)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Fri 21 Aug 2015 03:26:32 PM UTC, comment #7: 

Patch included (partially fixes this bug), see patch #8721.

This patch fixes following issues:

  • Gnash's `GetVariable()` interface passed values in their original type rather than string.
  • Gnash didn't pass some variable types like Infinity Number, NaN Number, Array, and Object through `GetVariable()` properly (and crashed).


After applied the patch, running `getvariable.html` on browser with Gnash results in this output:
+verbose+
Flash's string_variable: type=string, value=Hello!
Flash's integer_variable: type=string, value=1234
Flash's float_variable: type=string, value=1234.5678
Flash's infinite_variable: type=string, value=Infinity
Flash's neginfinite_variable: type=string, value=-Infinity
Flash's nan_variable: type=string, value=NaN
Flash's boolean_variable: type=string, value=true
Flash's undefined_variable: type=object, value=null
Flash's nonexistent_variable: type=object, value=null
Flash's null_variable: type=string, value=null
Flash's array_variable: type=string, value=The,quick,brown,fox,jumps,over,the,lazy,dog
Flash's object_variable: type=string, value=[object Object]
-verbose-

You'd see that there's no crash, and result is nearly identical to Adobe Flash.
The exception is an undefined variable case, which gives an object `null`
instead of a string "undefined" due to Gnash's limitation.


Gnash: 0.8.11dev (patched against git 88f86a3 19-Aug-2015) NPAPI
Adobe Flash Player: 11.2 r202 (11.2.202.491) NPAPI binary
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Fri 21 Aug 2015 02:08:56 PM UTC, comment #6: 

These are list of problems in Gnash that affects EFF Panopticlick
as far as I have tested:

Problems in Gnash's `GetVariable(variablePath)` interface:

  • Gnash doesn't interpret `variablePath` in slash-colon notation correctly.
  • Gnash's `GetVariable()` interface passes values in their original type rather than string.
  • Gnash doesn't pass some variable types like Infinity Number, NaN Number, Array, and Object through `GetVariable()` properly (and crashes).


Problems in Gnash's `TextField` class:

  • `TextField.getFontList()` is not defined properly as `static`.
  • `TextField.getFontList()` is not implemented.


Gnash: 0.8.11dev (git 88f86a3 19-Aug-2015)
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Fri 21 Aug 2015 11:17:27 AM UTC, comment #5: 

I found that if I changed `fontlist.as` (in fontlist test case) to
the following code; using a slightly more convoluted way of calling the
supposedly-static TextField.getFontList() function to silence ActionScript error:

var fontlist;

trace("Creating dummy TextField...");
createTextField("dummytext",0,0,0,0,0);

trace("Fetching list of available fonts...");
fontlist=TextField.getFontList.call(dummytext);

trace("Font listing: "+fontlist);


Although the resulting font list in Gnash log output is still `undefined`,
the ActionScript error of function call is gone, and an interesting
message appeared:

126 UNIMPLEMENTED: TextField.getFontList()


This shows that Gnash didn't implement `TextField.getFontList()` and didn't
properly declare it as a static method; hence the function call complication.

Side note: this code also works with Adobe Flash Player.

Gnash: 0.8.11dev (git 88f86a3 19-Aug-2015)
Adobe Flash Player: 11.2 r202 (11.2.202.491) standalone binary
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Thu 20 Aug 2015 04:49:16 PM UTC, comment #4: 

For the problem of data marshalling, I've created a test Flash/HTML file
(using libming's makeswf again) to demonstrate how variables of various type
got translated via `GetVariable(variablePath)` call. This test is done
without slash-colon notation.

When running `getvariable.html` on browser with Adobe Flash Player:

Flash's string_variable: type=string, value=Hello!
Flash's integer_variable: type=string, value=1234
Flash's float_variable: type=string, value=1234.5678
Flash's infinite_variable: type=string, value=Infinity
Flash's neginfinite_variable: type=string, value=-Infinity
Flash's nan_variable: type=string, value=NaN
Flash's boolean_variable: type=string, value=true
Flash's undefined_variable: type=string, value=undefined
Flash's nonexistent_variable: type=object, value=null
Flash's null_variable: type=string, value=null
Flash's array_variable: type=string, value=The,quick,brown,fox,jumps,over,the,lazy,dog
Flash's object_variable: type=string, value=[object Object]


You'd see that all values are properly passed to JavaScript in string form.
The only exception is nonexistent variable, which is passed as `null`.

When running `getvariable.html` on browser current Gnash 0.8.11dev git:

Flash's string_variable: type=string, value=Hello!
Flash's integer_variable: type=number, value=1234
Flash's float_variable: type=number, value=1234.5678
Flash's infinite_variable: type=number, value=0
Flash's neginfinite_variable: type=number, value=0
Flash's nan_variable: type=number, value=0
Flash's boolean_variable: type=boolean, value=true
Flash's undefined_variable: type=object, value=null
Flash's nonexistent_variable: type=object, value=null
Flash's null_variable: type=object, value=null
Flash's array_variable: type=function, value=[object NPObject JS wrapper class]
Error occured:
Error: Error calling method on NPObject!


You'd see that values are returned using original types,
+/-Infinity, NaN, undefined, and Array are not passed properly,
then plugin crashed.

Note: generic Object type will also result in the same crash (and same
`type=function, value=[object NPObject JS wrapper class]` output)
if the corresponding JavaScript code had been run before Array's one.


Test Flash/HTML file, source code, build script, full text outputs,
and screenshots of both cases are attached (getvariable.zip).

Gnash: 0.8.11dev (git 88f86a3 19-Aug-2015) NPAPI
Adobe Flash Player: 11.2 r202 (11.2.202.491) NPAPI binary
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386


(file #34682)

Nutchanon Wetchasit <nachanon>
Thu 20 Aug 2015 12:42:25 PM UTC, comment #3: 

I've created HTML/Flash file (using libming's makeswf) to emulate what
Panopticlick's Flash file do, by assigning Array return value from
`TextField.getFontList()` to a variable named `fontlist` inside root movie.
Then access it from JavaScript via `GetVariable()`, using slash-colon variable
path notation.

When running `fontlist.html` on browser with Adobe Flash Player:

JavaScript calls Flash's GetVariable: OK (returned type string)
Font listing:
TeXGyreCursor,esint10,TeXGyreHerosCondensed,FreeMono,LMMonoLt10,Loma,Droid Sans,Century Schoolbook L,LMSansQuot8,Garuda,Purisa,STIXSizeTwoSym,DejaVu Sans Mono,TeXGyreAdventor,Bitstream Vera Serif,LMMonoSlant10,Droid Sans Mono,STIXSizeThreeSym,Arundina Sans,STIXIntegralsUpSm,Umpush,OpenSymbol,Sawasdee,URW Palladio L,Bitstream Vera Sans Mono,TeXGyreSchola,Bitstream Vera Sans,FreeSerif,rsfs10,Arundina Serif,TH SarabunPSK,STIXNonUnicode,URW Gothic L,Dingbats,URW Chancery L,msbm10,Tlwg Typist,DejaVu Sans Light,STIXGeneral,cmr10,Norasi,DejaVu Serif Condensed,STIXVariants,cmmi10,LMSans10,Liberation Sans Narrow,LMRoman10,Symbol,LMRomanDunh10,Liberation Mono,STIXIntegralsD,Bitstream Charter,Liberation Serif,Microsoft Sans Serif,DejaVu Sans Condensed,Courier 10 Pitch,STIXIntegralsUpD,Nimbus Sans L,MarVoSym,TeXGyreChorus,LMRomanDemi10,DejaVu Sans,LMMonoCaps10,LMMonoLtCond10,Kinnari,TlwgMono,Standard Symbols L,Nimbus Mono L,Waree,cmex10,FreeSans,STIXSizeOneSym,Nimbus Roman No9 L,LMRomanUnsl10,DejaVu Serif,TlwgTypewriter,LMMono10,Tlwg Typo,Droid Serif,Liberation Sans,eufm10,TeXGyrePagella,Courier New,LMRomanCaps10,STIXSizeFourSym,wasy10,LMSansDemiCond10,LMRomanSlant10,Tahoma,TeXGyreTermes,TeXGyreBonum,LMMonoProp10,STIXIntegralsSm,STIXIntegralsUp,TeXGyreHeros,cmsy10,Arundina Sans Mono,TH Sarabun New,STIXSizeFiveSym,URW Bookman L,LMMonoPropLt10,msam10


After 3 sec, you'd see that font list is passed to JavaScript correctly as String.

When running `fontlist.html` on browser with current Gnash 0.8.11dev git:

JavaScript calls Flash's GetVariable: Failed (returned type object)
Value: null


After 3 sec, you'd see that the value passed to JavaScript is `null` instead of font list string.

This is what appeared in Gnash debug log:

68 ACTIONSCRIPT ERROR: The 'var whatever' syntax in timeline context is a no-op.
68 TRACE: Fetching list of available fonts...
69 ACTIONSCRIPT ERROR: ActionCallMethod: Function requiring gnash::TextField* as 'this' called from gnash::as_object* instance.
69 TRACE: Font listing: undefined



Test Flash/HTML file, source code, build script, full text output,
full debug logs and screenshots of both cases are attached (fontlist.zip).

Gnash: 0.8.11dev (git 88f86a3 19-Aug-2015) NPAPI
Adobe Flash Player: 11.2 r202 (11.2.202.491) NPAPI binary
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386


(file #34681)

Nutchanon Wetchasit <nachanon>
Thu 20 Aug 2015 12:15:11 PM UTC, comment #2: 

I've looked more closely, and I found that Panopticlick's Flash file is
not really using ExternalInterface, but uses the old-school plugin-provided
`GetVariable(variablePath)` facility, which fetch value from Flash variable
as String, regardless of variable's actual type within Flash.

In Panopticlick case, the variable in question is an Array named `user_fonts`
in root movie, accessed using `GetVariable("/:user_fonts")` from JavaScript.
The content of `user_fonts` is a value returned from `TextField.getFontList()`
static function call.

Gnash seems to have several problem with this:

  • Gnash didn't resolve variable path in slash-colon notation correctly.
  • Gnash didn't pass some variable types (like Infinity Number, NaN Number, Array, and Object) through GetVariable() properly.
  • Calling `TextField.getFontList()` under Gnash somehow caused ActionScript error (and return `undefined`).


First and third problem caused `null` to be returned to JavaScript,
second problem in Array/Object case caused Gnash plugin to crash.

Gnash: 0.8.11dev (git 88f86a3 19-Aug-2015) NPAPI
Adobe Flash Player: 11.2 r202 (11.2.202.491) NPAPI binary
Browser: Iceweasel 10.0.12 (debian)
System: Debian GNU/Linux 7.0 Wheezy i386

Nutchanon Wetchasit <nachanon>
Sun 09 Aug 2015 02:56:28 PM UTC, comment #1: 

As far as I know, EFF Panopticlick uses Flash (if available) to detect
installed fonts, and requires JavaScript calling into Flash to retrieve
font list as a long comma-separated string.

Gnash has a problem with JavaScript calling Flash function,
and it caused the test to fail silently due to `null` return value.

See bug #37223 (JavaScript-to-Flash ExternalInterface problem) for details.

Flash file URL (Flash 7): https://panopticlick.eff.org/resources/fonts2.swf
Panopticlick test script: https://panopticlick.eff.org/resources/fetch_whorls.js

Nutchanon Wetchasit <nachanon>
Tue 20 May 2014 07:19:59 PM UTC, original submission:  

I just install Debian 7.5 wheezy. IceWeasel comes with gnash 0.8.11dev preinstalled.

I try to access the panopticlick site (https://panopticlick.eff.org/), push the "test me" button, but the only answer I get is a "Please wait...".

If I deactivate Gnash, the answer is correct.

Can you help me with this ?

Jean Daux <jeandaux>

 

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

Attach Files:
   
   
Comment:
   

Attached Files
file #36301:  panopticlick_gnash0.8.11dev-435d3e9.patched1.png added by nachanon (305KiB - image/png - Screenshot of EFF Panopticlick on browser using Gnash 0.8.11dev git 435d3e9 with patch #8908)
file #36293:  getvariable-slashcolon.zip added by nachanon (23KiB - application/zip - GetVariable slash-colon path test Flash file, with HTML container, source code, screenshots and logs)
file #35743:  extgetvariable-auto.tar.gz added by nachanon (17KiB - application/x-gzip - Automated version of `getvariable-v3.html` test case)
file #34974:  getvariable-v3.zip added by nachanon (14KiB - application/zip - Improved GetVariable test Flash file, with source code and reference screenshot)
file #34682:  getvariable.zip added by nachanon (18KiB - application/zip - GetVariable test Flash file, with source code, screenshots and logs)
file #34681:  fontlist.zip added by nachanon (19KiB - application/zip - Test Flash file emulating Panopticlick, with source code, screenshots and logs)

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by strk (Posted a comment)
  • -email is unavailable- added by nachanon (Posted a comment)
  • -email is unavailable- added by jeandaux (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 11 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2017-01-30 strk StatusReady For Test Fixed
        Open/ClosedOpen Closed
    2016-02-15 strk CategoryNone plugin
        StatusNone Ready For Test
        Assigned toNone strk
    2016-02-10 nachanon Attached File- Added panopticlick_gnash0.8.11dev-435d3e9.patched1.png, #36301
    2016-02-10 nachanon Attached File- Added getvariable-slashcolon.zip, #36293
    2015-12-14 nachanon Attached File- Added extgetvariable-auto.tar.gz, #35743
    2015-09-24 nachanon Attached File- Added getvariable-v3.zip, #34974
    2015-08-20 nachanon Attached File- Added getvariable.zip, #34682
    2015-08-20 nachanon Attached File- Added fontlist.zip, #34681

    Back to the top

    Powered by Savane 3.13-758e.
    Corresponding source code