Firefox 45ESRとFirefox 47以降で、法人利用に影響のある変更が入ります - 2016-05-10 - ククログ

ククログ

株式会社クリアコード > ククログ > Firefox 45ESRとFirefox 47以降で、法人利用に影響のある変更が入ります

Firefox 45ESRとFirefox 47以降で、法人利用に影響のある変更が入ります

Bug 1267567が修正され、Firefox 45ESRの次のリリースとFirefox 47以降のバージョンにおいて、法人利用に影響を及ぼし得る変更が入りました。

現在Firefox 45ESR、Firefox 46、およびThunderbird 45に対してMCDの集中管理用設定ファイルを使用している環境では、同じ設定ファイルを次以降のリリースのFirefoxまたはThunderbirdでそのまま使うと、期待通りの結果を得られない可能性があります。 説明を参考に、設定ファイルの修正を行ってください。

以下、詳細と対応方法について詳しくご説明します。

影響範囲

先に「次以降のリリースのFirefoxまたはThunderbirdで」と述べましたが、実際の所、Bug 1267567はFirefox 40からFirefox 45にかけて発生していた後退バグに関する物です。 つまり正確に言うと、以下に列挙したバージョンのFirefoxには、集中管理用設定ファイルの取り扱いに問題があるということになります。

  • 40.0

  • 40.0.1

  • 40.0.2

  • 41.0

  • 41.0.1

  • 41.0.2

  • 42.0

  • 43.0

  • 43.0.1

  • 43.0.2

  • 43.0.3

  • 43.0.4

  • 44.0

  • 44.0.1

  • 44.0.2

  • 45.0 / 45.0ESR

  • 45.0.1 / 45.0.1ESR

  • 45.0.2 / 45.0.2ESR

  • 45.1.0 / 45.1.0ESR

  • 45.1.1 / 45.1.1ESR

  • 46.0

  • 46.0.1

ここに列挙したいずれかのバージョンのFirefox、およびバージョン番号が一致しているThunderbird向けに作成されたMCDの集中管理用設定ファイルは、これら以外のバージョンでは正常に読み込まれない可能性があります。

問題の概要

集中管理用設定ファイルは、日本語の文字を含める場合はUTF-8でエンコーディングする必要がありました。 しかしながら上記のバージョンでは、MCD用設定ファイル全体をUTF-8でエンコーディングしていても、文字列型の設定値に非ASCII文字(例えば、ひらがな・カタカナ・漢字など)が含まれていると、値が正常に読み込まれず空文字になってしまうという問題が起こります。

これは、Bug 1137799の修正の結果、ファイルの読み込み後の内容がUTF-8バイト列そのままで扱われず、Unicode文字列に変換されるようになったためです。

Firefoxの文字列型設定を読み書きする内部APIは、Unicode文字列ではなくUTF-8バイト列を入出力に使用する設計になっています。 Firefox 38ESRおよびFirefox 39までのバージョンでは、設定ファイル全体がUTF-8バイト列として読み込まれたまま解釈されていたため、ファイル内にUTF-8バイト列として記述された文字列がそのまま内部APIに渡される形となり、結果として文字列型の設定値が正しく読み書きされるという状況でした。

ところが、Bug 1137799の修正によりファイル全体が一旦Unicode文字列に変換されるようになった結果、文字列型設定を読み書きする内部APIに対してUTF-8バイト列ではなくUnicode文字列が渡されるようになってしまいました。 その結果、上記のバージョンでは文字列値が期待通りに読み書きされなくなってしまっていました。

この問題を回避する方法として、設定ファイル内で文字列値をlockPref()などの関数に渡す前に、unescape(encodeURIComponent("文字列"));と変換する、という方法があります。 例えば以下の要領です。

function lockStringPref(aKey, aValue) {
  aValue = unescape(encodeURIComponent(aValue));
  lockPref(aKey, aValue);
}

lockStringPref("_test.string.non-ASCII", "日本語");

これにより、Unicode文字列をUTF-8バイト列にしてから文字列型設定値を保存するAPIに引き渡す事になるため、非ASCII文字の設定値も期待通りに認識されるようになります。

しかしながら、Bug 1267567の修正により、文字列型の設定値については、Firefox自身が自動的にUnicode文字列からUTF-8バイト列への変換を行うようになりました(上記の回避策と同等の事をFirefox自身が行うようになりました)。

その結果、集中管理用設定ファイル内で上記の回避策を実施している場合には、回避策が二重に実施されるのと同じ結果となり、却って動作がおかしくなってしまうという状況が発生します。

設定ファイルの修正方法

以上のような経緯のため、今後リリースされるFirefoxでは、上記の例のような回避策が不要となります。 日本語の値であっても、設定はすべてlockPref()などの関数の値に直接記述できるようになり、結果として、Firefox 38ESRおよびFirefox 39までの挙動と同じに戻りました。 上記の回避策に類する変換を行っていた場合、変換を行なわないように設定ファイルを修正してください。 それにより、引き続き同じ設定ファイルをFirefox 47以降・Firefox 45ESR以降で使い続けられます。

まとめ

Firefox 45ESR、Firefox 47、およびThunderbird 45の今後のリリースで行われた変更のうち、法人利用への影響が懸念される変更点について、概要と対策をご紹介しました。 影響を受けるバージョンを使われる際には、上記の点にくれぐれもご注意下さい。