[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00848] Re: FDclone coredumps on early error



 しらいです。

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 ----

                                               しらい たかし