スクリプターズカフェ/ログ/MonoでllBase64ToStringの不具合
出典: Second Life in Japan
[編集] 08/09/13
ametaさんから、Monoコンパイルしたスクリプトにて、llBase64ToStringでrun time errorが発生する場合があると教えていただきました。
具体的には以下のようなエラーが表示されたそうです。
System.ApplicationException: String error: Invalid sequence in conversion input at (wrapper managed-to-native) LindenLab.SecondLife.Library:llBase64ToString (string) at LSL_83492b19_3443_dbe4_27a7_b4ae9c2d9e32.edefaulttouch_start (Int32 total_number) [0x00000] at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[]) at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000]
このエラーを再現させるために、いろいろな文字列をbase64エンコードして、それをllBase64ToStringに投入して確認しました。
オフィスアワー中には上手く再現させられなかったのですが、その後ametaさんとFakeさんによって、実際にエラーが再現するコードが見つかりました。
→PJIRA SVC-3072 Error message using llBase64ToString under Mono
※特定範囲のバイナリデータをBase64エンコードした文字列にて発生するということでした。
この問題については、SIMコードのバージョン1.24.6にて修正されたとのことです。
[編集] 08/09/20
「特定のバイナリの取り扱いでエラーが発生する」という絡みから、llBase64ToString以外の関数でも同じ現象が発生しないか、FakeさんとGOTTiとで確認しました。
次の関数で、同じ原因と思われる不具合が発生するようです。
- llUnescapeURL
- link_messageイベント
[編集] 1.24.6での修正状況を確認
llBase64ToStringの修正状況をプレビューグリッドにて確認しました。
以前発生したようなrun time error自体は発生しなくなっていますが、戻り値は「???」という文字列になってしまうようです。
LSL2では同じバイナリ文字列でも正しく復元されるので、現時点ではまだ「正しく修正された」とはいえない状況のようです。
このページのTinyURL:http://tinyurl.com/SC-Mono-Base64
