llSetText と Abyss の障害について

llSetText と Abyss の障害について

- Iseki Fumikazu の投稿
返信数: 3

8月上旬より,Abyss に入るとビューアがクラッシュするという現象が発生し,一時Abyssのみ7月末のバージョンのソフトウェアで作動させていましたが,今回原因が(恐らく)判明しましたので報告します.

簡単にいうと,llSetText() に255文字以上のテキストを指定した場合,254文字に切り詰める動作がいいかげんになっており,UTF-8の文字境界で正確に切り詰められない場合があります.

そのため,文字データが崩れ,その不正データを受信したビューアがクラッシュしたものと思われます.

現在,パッチを作成中ですが,完成しましたら順次SIMに適用していきます.

 

まあ,英語圏の人たちには関係ないバグですね.

Iseki Fumikazu への返信

Re: llSetText と Abyss の障害について

- Yan Lauria の投稿

あらら、そんな問題だったのですか。よく解明できたものですね!

そんなに文字数の多いフロートテキストを使ってたのか・・・。

Yan Lauria への返信

Re: llSetText と Abyss の障害について

- Iseki Fumikazu の投稿

git リポジトリで障害発生時までロールバックして,そのとき更新のあったファイルを虱潰しです.笑顔

Iseki Fumikazu への返信

Re: llSetText と Abyss の障害について

- Xpyoda Janus の投稿

デバッグご苦労様です。

これは、なかなかすぐ分るタイプのバグではなさそうで、よく発見されたと思います。(OpenSimのコードにはそのうちフィードバックされるのでしょうか?)

> 簡単にいうと,llSetText() に255文字以上のテキストを指定した場合,
> 254文字に切り詰める動作がいいかげんになっており,
> UTF-8の文字境界で正確に切り詰められない場合があります.

バイト単位でみてて、文字単位ではなく、ASCIIエンコードで254文字に詰めているってことですね、たぶん。

 

> そのため,文字データが崩れ,その不正データを受信したビューアがクラッシュしたものと思われます.

これ、Viwerに脆弱性が存在する可能性があるってことになりますよね。昔、Windowsで猛威をふるったNimdaウィルスも、UNICODE処理の不具合を利用して、外部から任意のコードを実行させることができましたし...。

 

> そんなに文字数の多いフロートテキストを使ってたのか・・・。

日本語だと、UTF-8 では1文字3バイト以上になるので、84文字以下しか書けないですね。