Sleep Away.mp3 に無効なビットストリームが含まれる件

こちらは最近MP3デコーダ開発者のお客様からご指摘をいただいた件です。Windows7 に同梱されている Sleep Away.mp3 にはヘッダに無意味なビットストリーム(いわゆるゴミ)が入っています。

そのようなファイルであっても、MP3 の規格 ISO/IEC 11172-3 には準拠しています。しかしMP3 デコーダの実装によってはこのことが問題となる場合があります。具体的には、ファイルが壊れていると表示されたり、ノイズが発生するなど、が考えられます。

影響を受けるデコーダの実装の例は以下のとおりです:

ヘッダの Size フィールドに書かれている値を見てタグサイズを調べ、そのタグサイズ分だけ読み飛ばしたところから開始して最初の同期ワードを以ってフレームとする。

そのような実装になっているデコーダでは、Sleep Away.mp3 のオフセット 0x6ec1 からの同期ワード(と解釈できるワード:赤い枠の部分)から始まる部分をフレームであると認識します。そしてその部分をフレームとして読み出すと複数のフィールドに無効な値が入っているため、エラー状態になります。

image

問題の部分は、ISO/IEC 11172-3 にてらして考えますと、フレームとは解釈できませんので、単純に読み飛ばすことが期待されます。ここを読み飛ばして同期ワードを探していくと、0x6f54 (青い枠の部分)から始まる部分が候補として見つかります。こちらは仕様に準拠したフレームとなっていますので、この場所からデコードを開始すれば問題は起こりません。

デコーダ開発者の皆様にはご迷惑をおかけしますが、MP3エンコーダの実装によってはこのようなビットストリームが生成されることも一般にありますので、フレームと解釈できないビットストリームは単純に読み飛ばすように実装いただけますよう、よろしくお願い申し上げます。