MH-plus project のぺーじ

・ MH-6.8.4-JP-3.02 に関する新情報 [更新: 16Sep1999]
こちらで確認したもの/してないもの…色々混ざってます。
[16Feb1999] NetBSD-1.3I などでの errno.h, sys/errno.h
[解決] NetBSD-1.3I から、これらのファイル構成が変更されたので、
sbr/advertise.c, uip/ftpsbr.c, uip/popsbr.c, uip/vmhsbr.c, uip/pshsbr.c, support/pop/syslog.c などで、
 #ifdef __NetBSD__ /* XXX */
-#include <sys/errno.h>
+#include <errno.h>
 #endif
でいけると思います。
[26Feb1999] SunOSS4.1.4-JLE で inc が "-ERR: Permission denied." と言われる
[報告のみ] … SunOS4.1.4 の setreuid() のバグ?
[01Mar1999] %{subject} の仕様 〜 repl で %{subject} の後ろに空白がつく
[解決] オリジナルの MH 自体の仕様(バグかも!?)です。
%{subject} が最後の改行文字まで含めて拾ってきて、これが mh-format で 空白に置き換わる際に、後ろの空白は取り除かれない仕様のために、 こうなります。
→ %{subject} の代わりに、%(trim{subject})%(putstr) として下さい。
[06Mar1999] Linux で scan が特定のメールに対し Segmentation Fault に
[報告のみ] …オリジナルの MH (sbr/m_getfld.c) のバグかも…。
[06Mar1999] Slackware Linux で vmh がコンパイル出来ない
[報告のみ]
[09Mar1999] pick が -search 等の引数で JIS コードを入力すると検索出来ない
[解決] … jp2c+-1.03 → JP-3.00 の時点でのエンバグです(汗)。
--- uip/picksbr.c.orig	Tue Feb  9 20:30:00 1999
+++ uip/picksbr.c	Fri Apr  9 14:43:38 1999
@@ -401,7 +401,7 @@
 #ifdef MHE
 	    {
 		/* Mule + MH-e have a bug, which output an internal code. */
-		int err = 0;
+		int err = 1;
 		char *pp, *pi, *po;
 		pp = po = getcpy(dp);
 		for (pi = pp; *pi; pi++) {
@@ -410,6 +410,7 @@
 		    else if (*pi == '\222' && ml_ismlptr(pi+1)) {
 			*po++ = *++pi;
 			*po++ = *++pi;
+			err = 0;
 		    } else {
 			err = 1;
 			break;

パッチをget (352byte) (MD5 = 0783c417af693af4d009cf2440acaf44)
[16Apr1999] option SETREUID 時に、inc を ?POP で使用するとユーザが root になってしまう。
[解決] JP-3.02 から付け加えた option SETREUID 用のところで、 setreuid() する前に、getusr() するの忘れてました(汗)。
(尚、16Apr1999 に報告がありましたが、ここに洩れてました(大汗) [07Jul1999])
--- uip/inc.c.orig	Mon Feb  8 20:30:00 1999
+++ uip/inc.c	Fri Apr 16 20:22:48 1999
@@ -248,6 +248,7 @@
     seteuid(real_uid);
 #else
 #ifdef SETREUID
+    getusr();
     setreuid(0, real_uid);
 #endif /* SETREUID */
 #endif /* SETEUID */
--- uip/msgchk.c.orig	Mon Feb  8 20:30:00 1999
+++ uip/msgchk.c	Fri Apr 16 20:24:10 1999
@@ -147,6 +147,7 @@
     seteuid(real_uid);
 #else
 #ifdef SETREUID
+    getusr();
     setreuid(0, real_uid);
 #endif /* SETREUID */
 #endif /* SETEUID */
パッチをget (734byte) (MD5 = a378f5c6cfea91a2171d34d4466928dd)
[11Jun1999] %(hencode(trim{subject})) で core を吐く
[解決] encode のための領域を malloc() してる関係でした(^^;;)
ちなみに %(trim(hencode{subject}))%(putstr) とすれば問題ないのですが…。
--- sbr/formatsbr.c.orig	Tue Feb  9 20:30:00 1999
+++ sbr/formatsbr.c	Thu Jun 17 00:41:41 1999
@@ -503,16 +503,8 @@
     int ljust;
     time_t l;
     char        *savestr;
-#ifndef MIME_HEADERS
     char	buffer[BUFSIZ];
 
-#else /* MIME_HEADERS */
-    char	*buffer;
-    int		buflen;
-
-    if ((buffer = malloc(buflen = BUFSIZ)) == NULLCP)
-	adios(NULLCP, "out of memory");
-#endif /* MIME_HEADERS */
     while (cp < ep) {
 	switch (fmt->f_type) {
 
@@ -665,21 +657,23 @@
 #ifdef MIME_HEADERS
 	case FT_LS_HENCODE:
 	    if (str) {
-		unsigned int l;
-		if ((l = strlen(str))*10 >= buflen
-		    && (buffer = realloc(buffer, buflen = l*10+1)) == NULL)
+		char *ep;
+		if ((ep = malloc((unsigned)strlen(str)*10+1)) == NULL)
 		    adios(NULLCP, "out of memory");
-		(void) exthdr_encode(str, buffer, 0, "");
+		(void) exthdr_encode(str, ep, 0, "");
+		(void) strncpy(buffer, ep, BUFSIZ);
+		buffer[BUFSIZ-1] = '\0';
 		str = buffer;
 	    }
 	    break;
 	case FT_LS_HDECODE:
 	    if (str) {
-		unsigned int l;
-		if ((l = strlen(str)) >= buflen
-		    && (buffer = realloc(buffer, buflen = l+1)) == NULL)
+		char *ep;
+		if ((ep = malloc((unsigned)strlen(str)+1)) == NULL)
 		    adios(NULLCP, "out of memory");
-		(void) exthdr_decode(str, buffer);
+		(void) exthdr_decode(str, ep);
+		(void) strncpy(buffer, ep, BUFSIZ);
+		buffer[BUFSIZ-1] = '\0';
 		str = buffer;
 	    }
 	    break;
@@ -1144,9 +1138,6 @@
     if (cp[-1] != '\n')
 	*cp++ = '\n';
     *cp   = 0;
-#ifdef JAPAN
-    free(buffer);
-#endif /* JAPAN */
     return ((struct format *)0);
 #else	/* JLR */
     if (cp[-1] != '\n')
@@ -1156,9 +1147,6 @@
 
     finished:;    
     *cp = '\0';
-#ifdef JAPAN
-    free(buffer);
-#endif /* JAPAN */
     return (fmt -> f_value ? ++fmt : (struct format *)0);
 
 #endif /* JLR */

パッチをget (734byte) (MD5 = 54294bd7cef46fb17408e49af6d26ee6)
[18Jun1999] inc が core dump する
[報告のみ] …3.02 での done() のエンバグ?(汗)
[06Aug1999]
・From: 行に長い(80文字位) MIME encoded-word があるようなメールに repl すると、 draft の To: 行が崩れる
・%(putaddr) で画面幅より長いヘッダ名を指定すると core dump する
[解決]
・RFC では、MIME encoded-word は 75文字以内であり、行全体は 76文字 以内でなければならないとされており、実際この範囲内の時には、このバグは 発生しません。きちんと RFC に従ったメールを処理していれば、 この問題は起こらないのです。…が(苦笑)、某 ○utlock (伏せ字(笑))とかいう メーラーがそういうメールを送ってくる様で…
・通常は %(putaddr To: ) とか、アドレスヘッダーは短いので問題は起こりません が…
--- sbr/formatsbr.c.bak	Thu Jun 17 00:41:41 1999
+++ sbr/formatsbr.c	Fri Aug  6 19:19:27 1999
@@ -1015,6 +1015,7 @@
 	    sp = fmt->f_text;
 	    indent = strlen (sp);
 	    wid -= indent;
+	    if (wid <= 0) wid = 1; /* avoid core dump */
 #ifdef JAPAN
 	    while ((ch = *sp++) && (cp < ep))
 		*cp++ = ch;
@@ -1043,16 +1044,24 @@
 			if (uprf(lp + (*lp == '(' ? 1 : 0), "=?")) {
 			    /* avoid to split MIME encoded-word */
 			    char *pp;
-			    for (pp = sp + 1; pp <= lp + 75; pp++)
-				if (isspace(*pp)) {
-				    if (uprf(pp - (*(pp-1) == ')' ? 3 : 2),
-					     "?=")) {
-					sp = pp - 1;
-					if (indent + sp - lp + 1 > 76)
-					    cp -= indent + sp - lp + 1 - 76;
-				    }
-				    break;
+			    for (pp = sp + 1; *pp && !isspace(*pp & 0xff); pp++)
+				;
+			    if (uprf(pp - (*(pp-1) == ')' ? 3 : 2), "?=")) {
+				int l = pp - lp;
+				if (l <= 75 && indent + l > 76) {
+				    int i;
+				    for (i = indent + l - 76; i > 0; i--)
+					if (*(cp - i) != ' ') {
+					    *cp++ = '\n';
+					    for (i = 0; i < 76 - l; i++)
+						*cp++ = ' ';
+					    break;
+					}
+				    if (i == 0)
+					cp -= indent + l - 76;
 				}
+				sp = pp - 1;
+			    }
 			}
 #endif /* MIME_HEADERS */
 		    } else
パッチをget (647byte) (MD5 = ed0db0480ab4b993b2901d6bc4e42f3f)
[09Sep1999] LinuxPPC 1999 (glibc2.1) + kernel-2.2.12 + egcs-2.91.66 19990314 で make しようとすると、smail.c でエラーを出して止まる。
[解決]
glibc-2.1 との相性(?)です。glibc-2.1 では、 /usr/include/bits/string2.h で strcpy がインラインマクロ定義されている ので。(Thanks to あまの@東北大さん)
--- mh-6.8.4-JP-3.02-orig/mts/sendmail/smail.c	Tue Feb  9 20:30:00 1999
+++ mh-6.8.4-JP-3.02/mts/sendmail/smail.c	Thu Sep  9 12:03:39 1999
@@ -1233,16 +1233,18 @@
 
 /*  */
 
-#ifdef _AIX
+#if  defined(_AIX) || (__GLIBC__ > 2) || ((__GLIBC__==2) && (__GLIBC_MINOR__>=1))
 /*
  * AIX by default will inline the strlen and strcpy commands by redefining
  * them as __strlen and __strcpy respectively.  This causes compile problems
  * with the #ifdef MPOP in the middle.  Should the #ifdef MPOP be removed,
  * remove these #undefs.
  */
+#ifdef _AIX
 #undef strlen
-#undef strcpy
 #endif /* _AIX */
+#undef strcpy
+#endif /* _AIX || __GLIBC__ */
 
 static int  sm_werror () {
     sm_reply.length =
パッチをget (456byte) (MD5 = 09b9b8c0ea7e51cfb3fff997f2f0ab2e)


はやし はるひさ hayashi あっとまーく laic.u-hyogo.学術.日本
=> Internet関連業績(笑)
=> MH-plus のぺーじ
=> MH のどうでもいいような趣味の講座

New


このページの最終更新日: 1999年 9月 16日 木ようび 曇