Discussion:
[Gnash-commit] [bug #42395] No respons from panopticlick site when gnash is activated
Jean Daux
2014-05-20 19:19:59 UTC
Permalink
URL:
<http://savannah.gnu.org/bugs/?42395>

Summary: No respons from panopticlick site when gnash is
activated
Project: Gnash - The GNU Flash player
Submitted by: jeandaux
Submitted on: mar. 20 mai 2014 19:19:59 GMT
Category: None
Severity: 3 - Normal
Release: None
Status: None
Privacy: Public
Assigned to: None
Open/Closed: Open
Discussion Lock: Any

_______________________________________________________

Details:

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 ?




_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message posté via/par Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-08-09 14:56:28 UTC
Permalink
Follow-up Comment #1, bug #42395 (project gnash):

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


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-08-20 16:49:16 UTC
Permalink
Follow-up Comment #4, bug #42395 (project gnash):

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
<Loading Image...>:

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
<Loading Image...>:

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)
_______________________________________________________

Additional Item Attachment:

File name: getvariable.zip Size:18 KB


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-08-21 11:17:27 UTC
Permalink
Follow-up Comment #5, bug #42395 (project gnash):

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 <https://savannah.gnu.org/bugs/?42395#comment3>:

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

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-08-21 14:08:57 UTC
Permalink
Follow-up Comment #6, bug #42395 (project gnash):

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


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-08-21 15:26:32 UTC
Permalink
Follow-up Comment #7, bug #42395 (project gnash):

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


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-08-24 08:23:46 UTC
Permalink
Follow-up Comment #8, bug #42395 (project gnash):

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
<http://git.savannah.gnu.org/cgit/gnash.git/tree/libcore/asobj/TextField_as.cpp?id=88f86a3c63171283388f3644008763f2e6ab851b#n594>
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

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-08-25 16:13:37 UTC
Permalink
Follow-up Comment #9, bug #42395 (project gnash):

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
<https://savannah.gnu.org/patch/?8723#comment2>

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

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Sandro Santilli
2015-08-25 17:25:25 UTC
Permalink
Follow-up Comment #10, bug #42395 (project gnash):

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).

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Sandro Santilli
2015-08-25 17:56:35 UTC
Permalink
Follow-up Comment #11, bug #42395 (project gnash):

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


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-08-28 13:25:52 UTC
Permalink
Follow-up Comment #12, bug #42395 (project gnash):

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.

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-09-24 15:48:58 UTC
Permalink
Follow-up Comment #13, bug #42395 (project gnash):

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
<https://savannah.gnu.org/bugs/?45840#comment3>.

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)
_______________________________________________________

Additional Item Attachment:

File name: getvariable-v3.zip Size:14 KB


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-12-14 17:29:00 UTC
Permalink
Follow-up Comment #14, bug #42395 (project gnash):

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)
_______________________________________________________

Additional Item Attachment:

File name: extgetvariable-auto.tar.gz Size:17 KB


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Richard Wilbur
2015-12-14 20:32:27 UTC
Permalink
Automated tests like this look very useful.

On Mon, Dec 14, 2015 at 10:29 AM, Nutchanon Wetchasit
[...]
Post by Nutchanon Wetchasit
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.
[...]
Post by Nutchanon Wetchasit
If bug #46115 is fixed, test time would be reduced to around 1.5 sec.
That's about 60x faster, much more usable in the the normal test
suite! Seems like a good thing to have consistent output policy.

I took a look at bug #46115 and Nutchanon has already provided a patch
to fix it. Sandro, what is needed before that patch can be merged and
#46115 closed? Seems it would make this newest automated test fit in
nicely with the current test suite.

Sincerely,
Richard
Sandro Santilli
2015-12-14 20:48:19 UTC
Permalink
Post by Richard Wilbur
Automated tests like this look very useful.
On Mon, Dec 14, 2015 at 10:29 AM, Nutchanon Wetchasit
[...]
Post by Nutchanon Wetchasit
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.
[...]
Post by Nutchanon Wetchasit
If bug #46115 is fixed, test time would be reduced to around 1.5 sec.
That's about 60x faster, much more usable in the the normal test
suite! Seems like a good thing to have consistent output policy.
I took a look at bug #46115 and Nutchanon has already provided a patch
to fix it. Sandro, what is needed before that patch can be merged and
#46115 closed? Seems it would make this newest automated test fit in
nicely with the current test suite.
It'd take testing that the newline should really be there.
We don't want to introduce an incompatibility.
Can the associated test be checked against the proprietary player ?

I'd also love to get these tests predictable and quick.

--strk;
Richard Wilbur
2015-12-15 15:37:36 UTC
Permalink
I'm also in favor of testing that the newline should really be there.
Do we already have a test that could be run against the proprietary
player? (I'd love to help but I don't have the proprietary player
installed under Linux and I don't have a build environment installed
under Windows. What is required to test under Windows on the
proprietary player? A build environment?)
Sandro Santilli
2015-12-15 07:26:06 UTC
Permalink
Follow-up Comment #15, bug #42395 (project gnash):

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.

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-12-18 14:17:40 UTC
Permalink
Follow-up Comment #16, bug #42395 (project gnash):

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


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-12-18 14:21:51 UTC
Permalink
Follow-up Comment #17, bug #42395 (project gnash):

@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)?


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Sandro Santilli
2015-12-18 14:25:13 UTC
Permalink
Follow-up Comment #18, bug #42395 (project gnash):

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.

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-12-19 06:05:23 UTC
Permalink
Follow-up Comment #19, bug #42395 (project gnash):

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


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Sandro Santilli
2015-12-19 08:03:01 UTC
Permalink
Follow-up Comment #20, bug #42395 (project gnash):

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.

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-12-19 08:59:00 UTC
Permalink
Follow-up Comment #21, bug #42395 (project gnash):

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
<https://savannah.gnu.org/bugs/?46115#comment5> 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.

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2015-12-19 16:51:41 UTC
Permalink
Follow-up Comment #22, bug #42395 (project gnash):

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


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2016-02-09 15:06:24 UTC
Permalink
Follow-up Comment #23, bug #42395 (project gnash):

EFF Panopticlick site <https://panopticlick.eff.org/> 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


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2016-02-09 15:10:13 UTC
Permalink
Follow-up Comment #24, bug #42395 (project gnash):

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
<https://savannah.gnu.org/bugs/?42395#comment3> 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


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2016-02-10 14:38:27 UTC
Permalink
Follow-up Comment #25, bug #42395 (project gnash):

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
<http://git.savannah.gnu.org/cgit/gnash.git/tree/testsuite/actionscript.all/getvariable.as?id=435d3e9aa7864883f6a2379fd318126113786475>.

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)
_______________________________________________________

Additional Item Attachment:

File name: getvariable-slashcolon.zip Size:23 KB


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Sandro Santilli
2016-02-10 14:56:35 UTC
Permalink
Follow-up Comment #26, bug #42395 (project gnash):

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.

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2016-02-10 16:11:52 UTC
Permalink
Additional Item Attachment, bug #42395 (project gnash):

File name: panopticlick_gnash0.8.11dev-435d3e9.patched1.png Size:304 KB


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2016-02-10 16:23:13 UTC
Permalink
Follow-up Comment #27, bug #42395 (project gnash):

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
<https://savannah.gnu.org/bugs/?42395#comment3> 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 <https://savannah.gnu.org/bugs/?42395#comment9>.

`getvariable-slashcolon.html` test
<https://savannah.gnu.org/bugs/?42395#comment25> 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: file #36301) Also, you'd see that "System Fonts" listing is
empty,
which is expected, as Gnash's `TextField.getFontList()` is unimplemented
<https://savannah.gnu.org/bugs/?42395#comment9>.

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

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Sandro Santilli
2016-02-15 10:41:53 UTC
Permalink
Follow-up Comment #28, bug #42395 (project gnash):

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

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Sandro Santilli
2016-02-15 10:48:15 UTC
Permalink
Update of bug #42395 (project gnash):

Category: None => plugin
Status: None => Ready For Test
Assigned to: None => strk

_______________________________________________________

Follow-up 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.

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2017-01-23 16:39:47 UTC
Permalink
Follow-up Comment #30, bug #42395 (project gnash):

See patch #9234 for an automated version of `getvariable-slashcolon.zip` test
<https://savannah.gnu.org/bugs/?42395#comment25>.

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

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Nutchanon Wetchasit
2017-01-28 17:29:36 UTC
Permalink
Follow-up Comment #31, bug #42395 (project gnash):

As the slash-colon GetVariable() test is now added and checked
<https://savannah.gnu.org/patch/?9234#comment10>, 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

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Sandro Santilli
2017-01-30 16:37:53 UTC
Permalink
Update of bug #42395 (project gnash):

Status: Ready For Test => Fixed
Open/Closed: Open => Closed

_______________________________________________________

Follow-up Comment #32:

A bug for an XFAILED is still good to have

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?42395>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/

John Gilmore
2015-08-23 04:45:12 UTC
Permalink
* Calling `TextField.getFontList()` under Gnash somehow caused ActionScript
error (and return `undefined`).
I think the pervasive use of font lists for letting websites
fingerprint users, as opposed to because the Flash file actually cares
about what fonts it might use in rendering, is why Gnash does not
implement it.

But perhaps we should fix the not-implemented routine to always return
some short, nondescript list of fonts, like "Font 1,Font 2".

John
Sandro Santilli
2015-08-24 10:33:36 UTC
Permalink
Post by John Gilmore
* Calling `TextField.getFontList()` under Gnash somehow caused ActionScript
error (and return `undefined`).
I think the pervasive use of font lists for letting websites
fingerprint users, as opposed to because the Flash file actually cares
about what fonts it might use in rendering, is why Gnash does not
implement it.
But perhaps we should fix the not-implemented routine to always return
some short, nondescript list of fonts, like "Font 1,Font 2".
I actually don't think there's any intention about that functionality
not being implemented, but it's surely a good idea (in case it'll ever
be implemented) to make it a user choice to enable/disable.

--strk;
Loading...