2006年11月12日の日記を表示中

2006年11月12日 (日)

gaim-2.0.0beta5 と ICQ

2chのスレ見たらこんな話が・・・.んなまさか.AIMのアカウントじゃ何もおこらんし.もしかしてICQだと起こるのかな?って自分のICQのアカウントって何だったっけ・・・.もう思い出せないや.

ICQのページに行って新規にアカウント取ったんですが,ふと見るとユーザ検索なんてのがありますな.げ,本名突っこんで検索したら古いの出てきたし.あれれ,こんなでっかい数字だったっけ? まあいいや

取ったアカウントでさっそくテストしてみると・・・見事に再現.落ちますね.あ,でもLinuxだと落ちません.何じゃこりゃ.2.0.0beta4で試してみても落ちます.なるほど.オフィシャル版だと落ちないということなので,念のためこちらのビルド環境を疑ってパッチ無し版をビルドしてみましたが,確かにこれだと落ちませんでした.

で,こっからが大変.MinGWのgdbでも入れりゃどこで落ちてるのかすぐ分かるだろうと思ったんですが,gdbかましてgaim動かそうとするとgdbが即落ち.動いているのattachしてもgaimが落ちたのに全然反応してくれずorz.使い方がよくわからんのですが,OllyDbgというのでちょっと動かしてみたらどうも「botch_utf」なる関数で落ちてるみたいです.でもバックトレースの見方がよくわからんのよね(´・ω・`)

ソースの方に戻ってパッチ見るとoscarでこの関数呼んでるのは3箇所.ええい,こうなったらprintfデバッグじゃ.って,何度か動かしてるとICQにログインできなくなりましたよ?なんか10分くらい待てとか言ってます.なんて厳しいんだ・・・(;´д`)

どうもgaim_prpl_oscar_convert_to_infotextで呼ばれるbotch_ucsで落ちてるみたいですねぇ.どれ,どんなテキストエンコードしてるのかメモリ内容表示させてみよう・・・って何かg_convertの返してきてる変換(UTF-8→UCS2)後の文字列長が異常に長いんですけど.もしかしてg_convertがおかしいのか?・・・と一瞬思ったんですがよく見ると変換後の文字列長だと思ってた変数は文字列長のポインタでしたorz.「*」1個つけて解決.

--- libgaim/protocols/oscar/oscar.c~    2006-11-11 09:12:41.000000000 +0900
+++ libgaim/protocols/oscar/oscar.c     2006-11-13 01:34:44.000000000 +0900
@@ -4281,7 +4281,7 @@
     charset = oscar_charset_check(str);
     if (charset == AIM_CHARSET_UNICODE) {
        encoded = g_convert(str, strlen(str), "UCS-2BE", "UTF-8", NULL, ret_len, NULL);
-       botch_ucs(encoded, ret_len);
+       botch_ucs(encoded, *ret_len);
        *encoding = "unicode-2-0";
     } else if (charset == AIM_CHARSET_CUSTOM) {
        encoded = g_convert(str, strlen(str), "ISO-8859-1", "UTF-8", NULL, ret_len, NULL);

あれ?何でこれLinuxだと平気なんだ???たまたまか? ちなみにいじってて気づいたんですが,Windowsで日本語名のグループ作ってそこに他の人のICQアカウント分類するとLinux側で同じアカウントでログインした際にグループ名が豪快に化けますね.逆もまた然り.あと,メッセンジャー追加の承認要求も化けまくりっつーかLinux間でも化ける・・・と思ったけど拒否の方のメッセージは化けないな・・・.気になる・・・.どこ直せばいいんだこれ.

[コメントを書く]

yaz 2006/11/13(月) 19:51:49
ああどうもすいません。さっき過去の差分を調べてみたんですが、4月16日あたりからこのバグが入っていたみたいです。ICQは日頃全然使っていないので、バグは見過ごされがちになってしまいます。linuxで発動しなかったのはたまたまそうなっただけだと思います。

グループ名や通知メッセージはwin上のicqクライアントとの運用でそれなりにうまく行っていると思っていたのですが、ダメですか。encodingをSJISにしてもダメですかねぇ…
nosuke 2006/11/14(火) 01:59:51
自分もICQまったく使わんのですが,まあこの辺,機会があったら見てみます(^^;.

Scrobblerでスレッドがどうこうという話

ここを見て,リンク先を見て,xmms_show_messageを呼ぶ前後でgdk_threads_enterとgdk_threads_leaveを呼ぶようにしたら昨日のスレッド周りのエラーは出なくなりました.うーん,あってんのかこの対処は?というかflacとかvorbisのプラグインでも同じようにエラー表示にxmms_show_message使ってるわけですが,こいつらは安全なのか?

[コメントを書く]

yaz 2006/11/13(月) 21:20:32
ランタイム依存だと思いますが、私の環境ではgdk_threads_enter()を使うとかなりの確率でデッドロックに…(笑 かなり使い方が難しい関数だと思います。
nosuke 2006/11/14(火) 01:58:55
うーん,本スレッド(?)以外からGtkいじるところでは逆に呼ばないと危ないものなのかと思ったんですが,デッドロックしちゃいますかね.今んとこ自分の環境では大丈夫そうですが・・・.

ICQの初代アカウント思い出した

あ,ICQって番号検索もできるんじゃん.やっぱあんなに桁数多い番号じゃなかったよなぁ.そう,確かこんな番号だったはず・・・あ,あってた! 一体いつ頃まで使ってたんだっけ,7年くらい前? 7桁の数字を未だに覚えてたとはなかなか.あれ,でも何で本名検索でひっかかんなかったんだ?・・・げぇ,ローマ字表記が違っとる(;´д`).・・・あれ,じゃあ最初に検索で出てきたやつはいつ取ったんだ??? というわけで,ICQのアカウントが3つになってしまいましたよ.

[コメントを書く]

OBONO 2006/11/13(月) 16:59:40
ICQでの君との会話は全部とっておいてあるよ。ぐへへ。
nosuke 2006/11/13(月) 17:35:24
お,おぼのさんには逆らえません((((;゜Д゜))) ガクガクブルブル

エスプガルーダ

3〜4回やったら5面のボス(セセリ?)まで到達しました.そういやオプションで縦画面にすると,TATEにした場合上の方が若干はみ出ますけど,オプションで目一杯下に下げた上で,さらにXRGB-3で水平位置(縦画面なので上下)を調整するとバッチリ画面内に収まるようになります.うーむ,凄まじくドットがクッキリ.XRGB-3側で走査線エミュレートできると雰囲気出てよりいいのですが(笑).

2006年11月12日の日記を表示中

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2006年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ