[バグ] Apple製 Bonjour SDK for java の TXTRecord がバグってる件

Appleのstable版として落とせるBonjour SDK Java 版の TXTRecord クラスのレコード長計算関連がバグってます。

症状としては、最大長255 bytes(これもおかしくて本当は200のはず)まで入れられるはずのTXTレコードに、127文字までしか入れられない。

原因は、レコード長を byte 型で扱っていること。
Java のbyte 型は、-128~127 の符号有り型なのだけど、どうやら符号無しの方法でコーディングされています。なので、128以上を入れてしまうと、長さがマイナス値を取り、byte配列各保持にマイナスの大きさの配列を確保しようとして落ちます。

運が良いことに、TXTRecordクラスはfinal じゃないので、サブクラスを作って、長さ保持変数をint にしたり、byte から長さを取るところを byte[num] & 0xFF にしたりして対応しました。

今は時間が無くて無理だし、まさかCVS版に残っているとも思えないけれど、もし残っているようならレポートしておこうかな。

0 コメント: