llSetText と Abyss の障害について

llSetText と Abyss の障害について

Iseki Fumikazu發表於
Number of replies: 3

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

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

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

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

 

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

In reply to Iseki Fumikazu

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

Yan Lauria發表於

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

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

In reply to Yan Lauria

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

Iseki Fumikazu發表於

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

In reply to Iseki Fumikazu

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

Xpyoda Janus發表於

デバッグご苦労様です。

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

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

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

 

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

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

 

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

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