namazu-ml(avocado)


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

MIME の message/partial (Re: mknmz の Out of memory ..)



加藤です.

> こんにちは.喜多@Nデーです.
		(略)
> そうそう,上のページ見てて思ったんですが,mknmz に base64 の部分を無視
> するオプションがあるとよいかもしれません.たとえば -u を指定したときに,
> uuencode や BinHEX に加えて base64 の部分の無視するようにできないでしょ
> うか?

mknmz をよくみると,実は対応してます(mailnews_filter というサブルーチ
ン を御覧下さい.)
にもかかわらず,
<URL:http://avocado.aichi-u.ac.jp/%7Ealias/namazu/msg00736.html>
の Base64 な部分が残ってしまうのが,長らく謎だったのですが,最近,よう
やくわかったような気がします.

Base64 な部分が残ってしまう mail/news て,別紙のように感じではないでしょ
うか? > 喜多さん
少なくとも,当方はこの症状のようです.

#どうも,AL-Mail か何かで binary を分割して送ると上記のような形態にな
#るようです (Windows なメール関係なので,よくわからないのですが).

で,見よう見まねでパッチを作りました.

(1) 処理内容にぜんぜん自信がないので,一読の上,何か問題があれば御指摘
    くださると幸いです.> ALL
(2) MHonARC で使用する場合,予め,rcfile 等で,Content-type: を出力する
    ように設定していないと,このパッチは効きません.

#産業廃棄物になってないとよいのですが...
----- * -------- 別紙 アヤシイ事例ここから ------* ------
Newsgroups: isoternet.wg.isotranet
From: foo@xxxxxxxxxxxx
Subject: データウ工アハウスで千進的なンリューション
Message-ID: <199803260251.AA00269@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 26 Mar 1998 11:51:08 +0900
Mime-Version: 1.0
Content-Type: message/partial; number=1; total=19; <---- ここに注目!
	id="199803260251.AA00268@xxxxxxxxxxxx"
Lines: 702
						<-- ここから body になる
Message-Id: <199803260251.AA00268@xxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="--------------------3340781312479425"

This is multipart message.

----------------------3340781312479425
Content-Type: text/plain; charset=iso-2022-jp

Jドキュメソトと,ゼソブンケソサク猿人 Namasu を活用したデータウ工アハウス
の構築例について御説明します.

(1) 日曜大工店を木材を購入し,おうちを作る.
(2) (1) に,ゼソブンケソサク猿人とJドキュメソトをなげいれ...

----------------------3340781312479425
Content-Type: application/octet-stream;
	name="isotranet.lzh"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="isotranet.lzh"

LgAtbGg1LdEKAADOLgAA5OSdNCACaWdNDwABY2hnX2NvbW0uaHRtBQAA/LgAAAejc532rba/
3PUr3+GJCtpLXqjj0kijrbcj1cbdcckmLtHXG/Rtyttu+frLbkhLe+8kEjbcbjccl4DW4q3D
		:		:
----- * -------- 別紙 アヤシイ事例ここまで ------* ------
diff -c -r namazu-1.3.0.0-beta-7/src/mknmz.pl namazu-1.3.0.0-beta-7tumi/src/mknmz.pl
*** namazu-1.3.0.0-beta-7/src/mknmz.pl	Thu Oct  8 16:37:58 1998
--- namazu-1.3.0.0-beta-7tumi/src/mknmz.pl	Mon Oct 12 21:26:13 1998
***************
*** 895,901 ****
  # 元となるものは古川@ヤマハさんにいただきました
  sub mailnews_filter ($$$\%) {
      my ($contents, $weighted_str, $title, $fields) = @_;
!     my ($line, $boundary, @tmp);
  
      $$contents =~ s/^\s+//;
      # 1 行目がヘッダっぽくないファイルは、ヘッダ処理しない
--- 895,901 ----
  # 元となるものは古川@ヤマハさんにいただきました
  sub mailnews_filter ($$$\%) {
      my ($contents, $weighted_str, $title, $fields) = @_;
!     my ($line, $boundary, $partial, @tmp);
  
      $$contents =~ s/^\s+//;
      # 1 行目がヘッダっぽくないファイルは、ヘッダ処理しない
***************
*** 941,948 ****
--- 941,977 ----
  	    if ($line =~ /multipart.*boundary="(.*)"/i){
  		$boundary = $1;
  		dprint "((boundary: $boundary))\n";
+  	    } elsif ($line =~ /message\/partial;\s*(.*)/i) {
+  		$partial = $1;
+  		dprint "((partial: $partial))\n";
  	    }
  	} 
+     }
+     if ($partial) {
+       # MHonARC 経由だと,ヘッダとボディの間に空行/空白行が複数できるので削除.
+       while(@tmp) {
+ 	last if (! $line =~ /^\s*$/);
+ 	$line = shift(@tmp);
+       }
+       while (@tmp) {
+ 	$line = shift(@tmp);
+ 	last if ($line =~ /^$/);  # if an empty line, header is over
+ 	# connect the two lines if next line has leading spaces
+ 	while (defined($tmp[0]) && $tmp[0] =~ /^\s+/) {
+ 	  # if connection is Japanese character, remove spaces
+ 	  # from Furukawa-san's idea [09/22/1998]
+ 	  my $nextline = shift(@tmp);
+ 	  $line =~ s/([\xa1-\xfe])\s+$/$1/;
+ 	  $nextline =~ s/^\s+([\xa1-\xfe])/$1/;
+ 	  $line .= $nextline;
+ 	}
+ 	if ($line =~ s/^content-type:\s*//i) {
+ 	  if ($line =~ /multipart.*boundary="(.*)"/i){
+ 	    $boundary = $1;
+ 	    dprint "((boundary: $boundary))\n";
+ 	  }
+ 	}
+       }
      }
      $$contents = join("\n", @tmp);
      if ($boundary) {