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