― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 13 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2011年2月10日(木) 19:55 
オフライン

登録日時: 2011年2月10日(木) 18:02
記事: 9
[ FireFox3.6.13 , WindowsXP/SP3 ]

現在、JavaScript JIT機能のバグではないかと思われる事象にぶつかって困っています。

以下、トラブルの内容と調査過程の説明になります。

http://www.h3.dion.ne.jp/~sakatsu/holiday_topic.htm
http://www.h3.dion.ne.jp/~sakatsu/holid ... nglish.htm
2003年から上記サイトで「祝日リスト」を作成するJavaScriptを公開しています。
JavaScriptコードは、表示される「祝日リスト」のページ内にリンクを設けてあるので、
そこから閲覧できます。

先日、FireFox3.6でリストを作成すると一部で間違った結果が出る事が判りました。
実例 : 2010~2012年 ⇒
2010/3/22(月, 振替休日) が出て来ない(2010/3/21(日) : 春分の日)
2012/3/12(月, 振替休日) が出て来る(2012/3/11(日) : 只の日曜日)

しかし、JavaScriptコードを確認しましたがコードに誤りは無く、また、他の
ブラウザ(FireFox2[Win Me], IE8, Opera11 ,Safari5)で作成した場合には
常に正しい結果が作成される事も確認しました。

FireFox3.6でも、作成期間を変えたり(2008-2012)すれば正しい結果が得られる
事も判りました。また、2010/3/22, 2012/3/12 の日付に対してピンポイントで
祝日判定を行なえば、ここでも常に正しい結果が得られます。

document.write を要所要所に入れてみたところ、上記の例では
 2010/3/21(日)を「只の日曜」、2012/3/11(日)を「勤労感謝の日」
と判定していました(これは勿論間違いです)。

ところが、FireBugアドオンを入れて、document.write を console.log に替えて
みたら、それだけで正しく判定するようになりました。
 2010/3/21(日)を「春分の日」、2012/3/11(日)を「只の日曜日」

更に試行を重ねた結果、console.log を入れなくても、単に FireBug を有効に
するだけで正しい結果が出る事が判りました(無効にすると、また間違った
結果がでるようになります)。


その後、FireFox3.5で、JITコンパイラのバグにより
「HTMLタグをJavaScriptで処理する際に起こる
エラーにより、メモリの内容が破壊されてしまう」
という記事(窓の杜)
http://www.forest.impress.co.jp/docs/ne ... 02600.html
を見付けました。

試しにJIT機能を無効にしたところ、それだけで、常に正しい祝日リストを
出力するようになりました(この時には、FireBugは無効にしてあります)。
JIT機能を有効に戻すと、また間違った結果を出します。


「窓の杜」の記事末尾にあるリンク先には、JITのバグは 3.5.1 で修正された
という記述が見られますが、今回、わたしが出会った事象からは、上記のバグ
が未だ残っているように思えます。

FireBug を使った際に症状が出ないというのも、FireBug というデバッガが
介在する事によってJIT機能が無効になっていた(もしくはバイパスしていた)
と考えれば辻褄が合うように思えます。


この症状に関して、何か関連する情報をお持ちの方、アドバイス頂ければと思います。
宜しくお願いします。


最後に編集したユーザー K.Tsunoda [ 2011年3月11日(金) 22:04 ], 累計 2 回

通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2011年2月19日(土) 18:06 
オフライン

登録日時: 2011年2月10日(木) 18:02
記事: 9
追加情報です。

[FireFox 4.0 Beta11, WindowsXP/SP3 ] で確認してみたところ、
件の障害(誤った日付結果)は起きませんでした。



JaegerMonkey を無効にした場合(TraceMonkey のみで処理)
 [javascript.options.methodjit.content = false]
 [javascript.options.tracejit.content = true]

件の障害が出て来ました。
ただ、オプション切替直後 or ブラウザ表示直後には障害が出ますが、
続けて再実行すると障害は出ずに正しい結果が表示されます。
また、その際にも、
 この障害有り:2010/3/22(月, 振替休日) が出て来ない(2010/3/21(日) : 春分の日)
 この障害無し:2012/3/12(月, 振替休日) が出て来る(2012/3/11(日) : 只の日曜日)
という結果で、FireFox3.6.13 の時とは若干異なる挙動でした。



JaegerMonkey/TraceMonkey 両方を無効にした場合
 [javascript.options.methodjit.content = false]
 [javascript.options.tracejit.content = false]

FireFox3.6.13 で JIT を無効にした場合と同じく、障害は出ませんでした。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2011年2月20日(日) 15:45 
オフライン

登録日時: 2011年2月10日(木) 18:02
記事: 9
Bugzilla@Mozilla へBug報告しようと思っています。

今、BugListに類似報告がないか見ていますが、良く判りませんね。

スクリプトのサイトは英語ページもありますので、そちらを指定しています。
(なお、単に日本語部分を英語に直してあるだけのスクリプトなんですが、それだけで
日本語ページでの実行とは、不具合の出方の挙動が若干異なります。これも謎ですが)

一応、下記の「下書き」を書いてみたんですが、何分、英訳ツール頼みなもので、なかなか
良い表現が出来ていない部分もあるかもしれません。

「ここは、こうした方が良い」といったアドバイスなど頂ければ助かります。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Product: Core or FireFox

Component: JavaScript Engine or General

Hardware Platform: x86

Operating System: Windows XP

Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)

URL: http://www.h3.dion.ne.jp/~sakatsu/holid ... nglish.htm

Summary: If TraceMonkey is valid, a practice result of Script is wrong. (FireFox3.6.13)


Details:
==================================================
There is a script making a list on a holiday in Japan in my HP.
(The definition of the holiday in Japan is listed in my HP.)
http://www.h3.dion.ne.jp/~sakatsu/holid ... nglish.htm
http://www.h3.dion.ne.jp/~sakatsu/Japan ... ake_Eng.js
http://www.h3.dion.ne.jp/~sakatsu/Japan ... Chk_Eng.js

It is confirmed that this script works definitely in IE8, Opera11, Safari5(WinXP) and FireFox2(WinMe).

However, wrong data are output when I make "a holiday list" in FireFox3.6.13,
and besides, a result changes whenever a script works.

1st practice after FireFox start : Only (a)
2nd practice : (a)&(b)
3rd practice : A right result

1st practice after reloading : Only (a)
2nd practice : A right result

A wrong example : [2010-2012 years]
Loop count of example is [365+365+366=1096].
(a) 2010 Mar. 22(Mon and "Holiday in lieu") is not output.
(2010 Mar. 21(Sun) is "Vernal Equinox Day".)
(b) 2012 Mar. 12(Mon and "Holiday in lieu") is output.
(2012 Mar. 11(Sun) is the normal sunday.)

["Holiday in Lieu" ( or "Substitute Holiday" ) ]
Definition : When Sunday becomes a holiday by the law, the next day( Monday ) becomes in the holiday.

The practice result (by documents.write) of the following step to judge "Holiday in Lieu."
JapanHolidayChk_Eng.js [Line No. 73] HolidayName = prvHolidayChk(YesterDay);
(a) prvHolidayChk(YesterDay(="2010/3/21")) is a null character("").
(b) prvHolidayChk(YesterDay(="2012/3/11")) is "National Foundation Day".
These are wrong results.

When I investigated it with FireBug, malfunction does not appear.
The practice result (by console.log of FireBug 1.6.2) of the step to judge "Holiday in Lieu."
(a) prvHolidayChk(YesterDay(="2010/3/21")) is "Vernal Equinox Day".
(b) prvHolidayChk(YesterDay(="2012/3/11")) is a null character("").
These are right results.
In addition, malfunction did not appear even if I did not insert console.log
when I started FireBug. Will FireBug invalidate TraceMonkey temporarily?


In addition, a right result is provided in the follows.
(1) I judge "one day" of [2010 Mar. 22] or [2012 Mar. 12].
window.alert(ktHolidayName("2010/3/22"));

(2) I change a period (2008-2012 years etc.).


---------------------------------------------------
The malfunction did not appear when I changed config to invalidate TraceMonkey.
[javascript.options.jit.content = false]


---------------------------------------------------
The malfunction did not appear when I tried it in FireFox4.0Beta11.

When I invalidated JaegerMonkey, malfunction appeared (work only in TraceMonkey).
 [javascript.options.methodjit.content = false]
 [javascript.options.tracejit.content = true]

1st practice after FireFox start or reloading : Only (a)
2nd practice : A right result


When I invalidated both JaegerMonkey and TraceMonkey, malfunction did not appear.
 [javascript.options.methodjit.content = false]
 [javascript.options.tracejit.content = false]


---------------------------------------------------
I expect a correction of the malfunction of TraceMonkey.

==============================================


Reproducibility: Happen every time


Steps to Reproduce:
1. Browse the following site.
http://www.h3.dion.ne.jp/~sakatsu/holid ... nglish.htm

2. Type the year of the period into two TextBox. [from 2010 to 2012]

3. Click [Holiday List] button.

4. "A holiday list" is output by a new window.

5. Change config to invalidate TraceMonkey and execute step-2 to 4.




Actual Results:
(a) 2010 Mar. 22(Mon and "Holiday in lieu") is not output.
(2010 Mar. 21(Sun) is "Vernal Equinox Day".)
(b) 2012 Mar. 12(Mon and "Holiday in lieu") is output.
(2012 Mar. 11(Sun) is the normal sunday.)

Note: A result changes whenever a script works.

1st practice after FireFox start : Only (a)
2nd practice : (a)&(b)
3rd practice : A right result(following "Expected Results")

1st practice after reloading : Only (a)
2nd practice : A right result(following "Expected Results")


The malfunction did not appear (following "Expected Results")
when it changed config to invalidate TraceMonkey.


Expected Results:
(a) 2010 Mar. 22(Mon and "Holiday in lieu") is output.
(2010 Mar. 21(Sun) is "Vernal Equinox Day".)
(b) 2012 Mar. 12(Mon and "Holiday in lieu") is not output.
(2012 Mar. 11(Sun) is the normal sunday.)





Additional Information:

Security: off

Severity: Normal: It's a bug that should be fixed.


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2011年2月20日(日) 16:12 
適切な英語表現がわからないのであれば、以下に日本語で。
http://bugzilla.mozilla.gr.jp/

きちんと確認できれば、わかる人が本家の方に類似のものがないかを検索、あるいは、(なければ)登録してくれるでしょう。


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2011年2月21日(月) 02:13 
オフライン

登録日時: 2011年2月10日(木) 18:02
記事: 9
palさん、ありがとうございます。日本語でのサポートサイトもあったんですね。

Bugzilla-jp へ[#6785]で投稿しました。
http://bugzilla.mozilla.gr.jp/show_bug.cgi?id=6785


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2011年2月21日(月) 17:42 
オフライン

登録日時: 2011年2月10日(木) 18:02
記事: 9
Bugzilla-jp[#6785] から 本家[#635657] へ登録されました。
https://bugzilla.mozilla.org/show_bug.cgi?id=635657

中野さん、ありがとうございます。

しかし・・・・・ 実にシンプルにまとまるもんですね(汗)


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2011年2月22日(火) 14:26 
オフライン

登録日時: 2011年2月10日(木) 18:02
記事: 9
本家に寄せられているコメントの雰囲気は
引用:
早く直して欲しいというのは判るけれど、
FireFox4 が日の目を見るまでは、
TraceMonkeyへの新たな課題を出されても、
人でもなくて、開発作業は手一杯で、
今現在、手が回らないので、待つしかないですよ。

という事でしょうか・・・(残念)


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2011年2月25日(金) 19:42 
オフライン

登録日時: 2011年2月10日(木) 18:02
記事: 9
引用:
Comment 21
> Given the switch statement, this might be related to Bug 620757.
Yeah, I'm 95% sure it's a dupe.


現在、switch を全て if-else に置き換えてテストしています。
今のところは上手くいっています。間違った結果は出ないようです。

ただ、TraceMonkey の仕組みを考えれば、テスト条件をピックアップしてのチェックでは
確実性が無いと思われるので、全ケースで修正前と修正後を試して、修正後で間違いが
ゼロになるか確認する必要がありますね(修正前では間違っていなかったケースが、
修正後で間違ってしまう可能性が無いとは言えませんので)。

とりあえず、2000~2050年の範囲でのテスト
[2000-2000] [2000-2001] [2000-2002] ・・・
[2001-2001] [2001-2002] [2001-2003] ・・・
・・・
[2049-2049] [2049-2050] [2050-2050]

締めて、1250ケース*修正前/後=2500回 を確認中です。

自動実行のスクリプトを作ると、そのスクリプトのループがテストに悪影響(出る筈の間違い
が出なくなる)を及ぼす可能性もあるので、手作業で1件ずつ(毎回リロードして初期化
もさせています。続けて実行すると、それもまた結果に影響するのが判ってますので)実行
掛けてますので、全て済むまで数日掛かりそうです。

全部終わったら、結果を報告します。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2011年2月25日(金) 19:52 
いろいろ検証して云々ということは、ここではんかう、登録なさったバグ、あるいは、本家のバグでやりとりしていただけませんか?

ここでお書きになっても、仕方ないと思います。
開発者、あるいはバグ担当者の方々は、基本的には、あまり(わざわざ)ここをご覧にはなられていないと思いますので。


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2011年2月25日(金) 19:54 
[誤字]
(誤) ここではんかう
(正) ここではなく


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2011年3月03日(木) 08:43 
オフライン

登録日時: 2011年2月10日(木) 18:02
記事: 9
このバグの根本理由が
引用:
ループ内の2番目の switch がTraceMonkeyの誤解釈により
「Value=5 の時に Case 3 のブロックに飛ぶ」といった間違った動きをする。

という事であると判りました。下記はその「まとめ」です。
http://www.h3.dion.ne.jp/~sakatsu/FireFox_TMBugTest.htm

Bugzilla-jp(#6785) および 本家Bugzilla(#635657)に、この報告を上げてあります。

回避方法として「switch の if-else への書き換え」も判りましたので
本スレッドは、これで「解決」とします。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2011年3月03日(木) 15:37 
オフライン

登録日時: 2009年4月26日(日) 00:32
記事: 97
お住まい: 大阪
K.Tsunoda さんが書きました:
Bugzilla-jp[#6785] から 本家[#635657] へ登録されました。
https://bugzilla.mozilla.org/show_bug.cgi?id=635657

中野さん、ありがとうございます。

しかし・・・・・ 実にシンプルにまとまるもんですね(汗)


こちらにスレッドあるの気づいてませんでした。

報告と、テスト作成は弊社の加藤誠です。私自身、JSは完全に専門外なのでサポートできず、すみません。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
 記事の件名: Re: 4.0b13pre にて修正
投稿記事Posted: 2011年3月11日(金) 22:03 
オフライン

登録日時: 2011年2月10日(木) 18:02
記事: 9
[4.0b13pre] で下記テストをしたところ、本件のバグが修正されている事を確認できました。

・ FireFox_TMBugTest.htm および 祝日一覧作成スクリプト
・ JaegerMonkey(ON) & TraceMonkey(ON)
・ JaegerMonkey(OFF) & TraceMonkey(ON)


通報する
ページトップ
 プロフィール  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 13 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[56人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean