|
sylpheed-jp:2551
From: Tomoya TAKA <tomoya@xxxxxxxxxx>
はじめまして、たか と申します。
最近、Alpha プロセッサ機の Linuxで sylpheed を本格的に
使用し始めたのですが、サマリの生成やメッセージの表示時に、
iconv()が呼ばれた時点で sylpheed が Segfault しました。
# 今までは簡単な送受信テストしか行っていなかったため、
# 運良く(運悪く?)この問題には遭遇していませんでした。
Linux/Alpha では、size_t が 32bit ではなく 64bit なのですが、
codeconv.c 内で iconv() の第3、第5引数に gint 変数のアドレスを
渡しているのが原因のようです。
glibc は 2.3.2 を使用していますが、以前のものでも同様だとおもいます。
以下のパッチで手元では問題を回避できています。
32bit環境でも問題ないと思いますが、テストはしていません。
ちなみに imap.c 内でも iconv() が使用されていますが、
ここでは size_t が使用されているので問題ないと思います。
が、手元に IMAP 環境がないのでこちらも未確認です。
diff -uNr sylpheed-0.9.8a.orig/src/codeconv.c sylpheed-0.9.8a/src/codeconv.c
--- sylpheed-0.9.8a.orig/src/codeconv.c 2003-12-04 13:52:47.000000000 +0900
+++ sylpheed-0.9.8a/src/codeconv.c 2004-01-28 16:06:00.000000000 +0900
@@ -803,9 +803,9 @@
gchar *outbuf;
gchar *outbuf_p;
gint in_size;
- gint in_left;
+ size_t in_left;
gint out_size;
- gint out_left;
+ size_t out_left;
gint n_conv;
gint len;
@@ -828,11 +828,11 @@
inbuf_p = inbuf;
in_size = strlen(inbuf);
- in_left = in_size;
+ in_left = (size_t)in_size;
out_size = (in_size + 1) * 2;
outbuf = g_malloc(out_size);
outbuf_p = outbuf;
- out_left = out_size;
+ out_left = (size_t)out_size;
#define EXPAND_BUF() \
{ \
@@ -840,7 +840,7 @@
out_size *= 2; \
outbuf = g_realloc(outbuf, out_size); \
outbuf_p = outbuf + len; \
- out_left = out_size - len; \
+ out_left = (size_t)(out_size - len); \
}
while ((n_conv = iconv(cd, (ICONV_CONST gchar **)&inbuf_p, &in_left,
--
Tomoya TAKA <tomoya@xxxxxxxxxx>
-> 2551 2004-01-28 22:13 [tomoya@xxxxxxxxxx ] Segfault on Linux/Alpha 2552 2004-01-29 12:23 ┗[hiro-y@xxxxxxxxxx ] 2554 2004-01-29 23:40 ┗[tomoya@xxxxxxxxxx ] |