summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfukachan <fukachan>2001-02-03 15:15:04 +0000
committerfukachan <fukachan>2001-02-03 15:15:04 +0000
commitc7d058fd25ba2d1ee41c4d784c60484122abc742 (patch)
treee919768eae1cfee3666755461408b5c0ce0b127c
parent019b64ef3730fff1e50e138bde5c4490e933cfc5 (diff)
downloadfml8-c7d058fd25ba2d1ee41c4d784c60484122abc742.tar.gz
fml8-c7d058fd25ba2d1ee41c4d784c60484122abc742.tar.bz2
fml8-c7d058fd25ba2d1ee41c4d784c60484122abc742.zip
we can print the tralior after the end of continuous multipart blocks
-rw-r--r--fml/lib/MailingList/Messages.pm22
-rw-r--r--regress/base/msg_mp.265
-rw-r--r--regress/base/multipart_io.pl2
-rw-r--r--regress/base/multipart_io.sh15
4 files changed, 93 insertions, 11 deletions
diff --git a/fml/lib/MailingList/Messages.pm b/fml/lib/MailingList/Messages.pm
index 7801c34c..dd98d997 100644
--- a/fml/lib/MailingList/Messages.pm
+++ b/fml/lib/MailingList/Messages.pm
@@ -288,10 +288,11 @@ sub parse_mime_multipart
return undef unless $args->{ content };
# boundaries of the continuous multipart blocks
- my $content = $args->{ content };
- my $boundary = $args->{ boundary };
- my $buf_begin = index($$content, $boundary , 0);
- my $buf_end = index($$content, $boundary."--", 0);
+ my $content = $args->{ content };
+ my $boundary = $args->{ boundary };
+ my $content_length = length($$content);
+ my $buf_begin = index($$content, $boundary , 0);
+ my $buf_end = index($$content, $boundary."--", 0);
# prepare lexical variables
# pb = position of the beginning, pe = position of the end
@@ -319,6 +320,16 @@ sub parse_mime_multipart
});
} while ($pe <= $buf_end);
+ my $p = index($$content, "\n", $buf_end) + 1;
+ if (($content_length - $p) > 0) {
+ $m[ $i++ ] = _alloc_new_part($self, {
+ boundary => $boundary,
+ offset_begin => $p,
+ offset_end => $content_length,
+ content => $content,
+ });
+ }
+
my $j = 0;
for ($j = 0; $j < $i; $j++) {
if (defined $m[ $j + 1 ]) {
@@ -345,9 +356,6 @@ sub _alloc_new_part
my $me = {};
_create($me, {
- next => $args->{ next } || undef,
- prev => $args->{ prev } || undef,
-
offset_begin => $args->{ offset_begin },
offset_end => $args->{ offset_end },
content => $args->{ content },
diff --git a/regress/base/msg_mp.2 b/regress/base/msg_mp.2
new file mode 100644
index 00000000..8862cf58
--- /dev/null
+++ b/regress/base/msg_mp.2
@@ -0,0 +1,65 @@
+Mime-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="----_=_NextPart_000_01BE1C09.8D2506D0"
+Precedence: bulk
+
+This message is in MIME format. Since your mail reader does not understand
+this format, some or all of this message may not be legible.
+
+------_=_NextPart_000_01BE1C09.8D2506D0
+Content-Type: text/plain;
+ charset="iso-2022-jp"
+
+fukachan. test of multipart.
+
+--fukachan
+
+------_=_NextPart_000_01BE1C09.8D2506D0
+Content-Type: image/gif;
+ name="ecscc.gif"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="ecscc.gif"
+Content-Location: ATT-0-7EE83767F087D211BEF500805F8BE119-e
+ cscc.gif
+
+R0lGODlhrABLAPcAAAAAAJlcAP+ZCv+ZEP+aF/+bHP+bH/+cJf+dKf+eLf+fM/+gOf+hPP+jQP+l
+Rv+mTP+oUP+qVP+sW/+tXv+wZP+yaf+0bf+3c/+4dv/CZv+8ff++gP/AhP/Cif/Gj//Ik//Jlv/M
+m//Pn//Qov/Spv/Vqv/WrP/Yr//asv/ctf/euP/euf/hvP/hvv/jwP/kwf/lw//mxP/mxf/nxv/o
+yP/pyf/pyv/qyv/qy////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADkALAAAAACsAEsA
+AAj/AHMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX
+MGPKnEmzps2bOHPq3MmzZ84AQIMKHUq0qNGjSIf6lBkAh9OnUKNKnUq1qtWoS2E2vcq1q9eqGbK6
+DHCjrNmzaNOqXcu2LdqwYlkGsEG3rt27ePPq3cv3Lty4KgPUGEy4sOHDiBMrXmz4L2CUAWhInky5
+suXLmDNrruz4scnIm0OLHp25s2eSAWaoXs26tevXsGPLbm36tMgAMnLr3s27t+/fwIPzrm0bZIAY
+yJMrX868ufPn0JcTL+4xAIzr2LNr3869u/fv2qdT/+cY4IX58+jTq1/Pvr379OLHawzgor79+/jx
+A9jPH4B9//kFKGCA8cmHUQAtJKjgggwqyB+D/QHQ4IQUUliggRYFwMKGHHbo4Yb7fQgifyKWaKKH
+F2JIUQArtOjiizCusF+ML/JH4404wpiiihIFoMKPQAYp5H5CFqkCkUYmqWSQO/IIUQApRCnllFPy
+R+WVKeyH5ZZcUtmkkw4FgMKYZJZZJn9mpjkmAGq26aaZX4LJUAAn1GnnnXbyh+eefN4ZYZ+Aximn
+QgGYYOihiB7KX6KMNmrofopC6mijgg6KUAAlZKrpppryx+mnoJawH6eehvpppZYaFAAJrLbqaqv8
+vf8q66wk7PdqrLTKimqqBAUwwq/ABgssf8IWa+x+xwJg7LK76pTUs0aJIO201E7LX7XYZrtfttx2
+C+23QNkE7rchlGvuuebyh+667O7H7rvwjpvUTSDUa++9+Oar77777scvv/z1++/ABA9cUwYfJKzw
+wgw37PDDDfMH8cMSRwzAxBhnDHEGHNuUgQcghyzyyCSXbPLI+52MMsj9kQyAyjDHbDLHzY6UQQc4
+56zzzjz37HPO/P0MtM79EQ2A0EgnzTPNPmXAwdNQRy311FRX/TR/VnMAgNQRRpj112BHzbRYGWxg
+9tlop6322mybzZ/a+63dddxt12132mM/loEGfPf/7fffgAcuON9zD044f4YnrnjfeduWAQaQRy75
+5JRXbvnlmGeu+eYYND5eBheELvropJdu+umop6766ql7jmEGFsQu++y012777bjnrvvutbvuZAYV
+BC/88MQXb/zxyCev/PLB+z5oBhREL/301Fdv/fXYZ6999s7zmsEE4Icv/vjkl2/++einT373vA6U
+gQTwxy///PTXb//9+OcPP/vtF5RBBAAMoAAHSMACGvCACDwg//p3kAxA4IEQjKAEJ0jBClrwghJc
+IAMTkoEHePCDIAyhCEdIwhKa8AEa3OBCMuCAFrrwhTCMoQxnSEMZplCFDclAA3bIwx768IdADKIQ
+t3l4Qxw+JAMMSKISl8jEJjrxiU8sohEjkoEFWPGKWMyiFrfIRSxKcYoTyYACxkjGMprxjGhM4xfB
+WJEMJOCNcIyjHOdIxziukY0XyQAC9sjHPvrxj4C8Ix4zkoEDGPKQiEykIg8pyEFuJAMGiKQkJ0lJ
+SjbSkR3JQAE2yclOerIAl8TkRzJAgFKa8pSlDKUoQ5KBAbjyla5U5SptJoBaCkCWsywJzWqWy176
+8pfADKYwh0nMYhYkIAA7
+
+------_=_NextPart_000_01BE1C09.8D2506D0--
+
+trailor
diff --git a/regress/base/multipart_io.pl b/regress/base/multipart_io.pl
index d3d79d03..e1073e12 100644
--- a/regress/base/multipart_io.pl
+++ b/regress/base/multipart_io.pl
@@ -5,7 +5,7 @@ my $dir = dirname($0);
$| = 1;
-my $msg = "$dir/msg_mp";
+my $msg = shift || "$dir/msg_mp";
use FileHandle;
my $fh = new FileHandle $msg;
diff --git a/regress/base/multipart_io.sh b/regress/base/multipart_io.sh
index 1b732bda..01ba7a0a 100644
--- a/regress/base/multipart_io.sh
+++ b/regress/base/multipart_io.sh
@@ -4,9 +4,18 @@ dir=`dirname $0`
tmp=/tmp/buf$$
-sed -n '1,/^$/p' $dir/msg_mp > $tmp
-perl $dir/multipart_io.pl >> $tmp
+trap "rm -f $tmp" 0 1 3 15
-diff -ub $dir/msg_mp $tmp && echo ok || echo fail
+
+DIFF () {
+ local msg=$1
+
+ sed -n '1,/^$/p' $msg > $tmp
+ perl $dir/multipart_io.pl $msg >> $tmp
+ diff -ub $msg $tmp && echo ok || echo fail
+}
+
+DIFF $dir/msg_mp
+DIFF $dir/msg_mp.2
exit 0;