[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00848] Re: FDclone coredumps on early error
- Subject: [FDclone-users:00848] Re: FDclone coredumps on early error
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Tue, 16 Feb 2010 19:46:04 +0900
しらいです。
In Message-Id <86bpfpr1lp.knu@iDaemons.org>
"Akinori MUSHA" <knu@iDaemons.org>さんwrites:
> FDclone の起動時、 setexecpath() でカレントディレクトリの取得に
> 失敗すると、 error() でエラーメッセージを出して終了しようとするの
> ですが、その時点ではまだ inittty() が済んでいないので、 tflush()
> から Xfflush() を呼んだところでSEGVになります。
current directory を失うなんて滅多にないことなのでチェック
が洩れてましたね。他にもあちこちに error() はあるので、多分
別の原因でも再現し得る bug だと思います。
最新版では、stream.c を MHpopd と共用してるので、そもそも
Xfflush() が NULL を渡しても SIGSEGV にならない実装になって
るのですが、未初期化部分に処理が渡る時点で問題ですね。
> とりあえずそれを防ぐだけならこうですが、もっといい修正があると
> 思うのでお任せします。
他にも該当箇所がないかどうか、後でじっくり調べてみますが、
取り敢えずはこんな感じでどうでしょうか?
---- Cut Here ----
diff -ur ../old/FD-3.00d/term.c ./term.c
--- ../old/FD-3.00d/term.c Sun Nov 30 00:00:00 2008
+++ ./term.c Tue Feb 16 19:33:34 2010
@@ -1144,7 +1144,7 @@
# endif /* !USESGTTY */
#endif /* !MSDOS */
}
- if (!dumbterm) {
+ if (!dumbterm && (termflags & F_INITTERM)) {
putterm(T_KEYPAD);
tflush();
}
@@ -1185,7 +1185,7 @@
# endif /* !USESGTTY */
#endif /* !MSDOS */
}
- if (!dumbterm) {
+ if (!dumbterm && (termflags & F_INITTERM)) {
putterm(T_NOKEYPAD);
tflush();
}
---- Cut Here ----
しらい たかし