diff options
| author | fukachan <fukachan> | 2001-02-03 15:29:44 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2001-02-03 15:29:44 +0000 |
| commit | 2bd489278fc3d72ff6b8107324a4726777ba0fc5 (patch) | |
| tree | 7e742a2f931c76dc4f7f808279452c2e12fcc8b4 | |
| parent | c7d058fd25ba2d1ee41c4d784c60484122abc742 (diff) | |
| download | fml8-2bd489278fc3d72ff6b8107324a4726777ba0fc5.tar.gz fml8-2bd489278fc3d72ff6b8107324a4726777ba0fc5.tar.bz2 fml8-2bd489278fc3d72ff6b8107324a4726777ba0fc5.zip | |
fix multipart handling when the preamble is empty
| -rw-r--r-- | fml/lib/MailingList/Messages.pm | 26 | ||||
| -rw-r--r-- | regress/base/msg_mp.1 | 60 | ||||
| -rw-r--r-- | regress/base/multipart_io.sh | 1 |
3 files changed, 78 insertions, 9 deletions
diff --git a/fml/lib/MailingList/Messages.pm b/fml/lib/MailingList/Messages.pm index dd98d997..46947a3a 100644 --- a/fml/lib/MailingList/Messages.pm +++ b/fml/lib/MailingList/Messages.pm @@ -298,28 +298,37 @@ sub parse_mime_multipart # pb = position of the beginning, pe = position of the end my ($msg, $next_part, $prev_part, @m); my $i = 0; + + # check the preamble before multipart blocks my $pb = 0; my $pe = $buf_begin; $self->_set_pos( $pe + 1 ); do { - $m[ $i++ ] = _alloc_new_part($self, { - boundary => $boundary, - offset_begin => $pb, - offset_end => $pe, - content => $content, - }); + # XXX not effective region if $pe <= $pb + # we should check this to avoid the empty preamble case. + if ($pe > $pb) { + $m[ $i++ ] = _alloc_new_part($self, { + boundary => $boundary, + offset_begin => $pb, + offset_end => $pe, + content => $content, + }); + } ($pb, $pe) = $self->_next_part_pos($content, $boundary); + # the closing of the blocks if ($pe > $buf_end) { $boundary .= "--";} - my $buf = $boundary."\n"; + + # add the multipart delimiter $m[ $i++ ] = _alloc_new_part($self, { content => \$buf }); } while ($pe <= $buf_end); + # check the trailor after multipart blocks exists or not. my $p = index($$content, "\n", $buf_end) + 1; if (($content_length - $p) > 0) { $m[ $i++ ] = _alloc_new_part($self, { @@ -330,6 +339,7 @@ sub parse_mime_multipart }); } + # build a chain of multipart blocks and delimeters my $j = 0; for ($j = 0; $j < $i; $j++) { if (defined $m[ $j + 1 ]) { @@ -341,8 +351,6 @@ sub parse_mime_multipart } next_chain($self, $m[0]); - - # use Data::Dumper; print Dumper( $self ); } diff --git a/regress/base/msg_mp.1 b/regress/base/msg_mp.1 new file mode 100644 index 00000000..3dd9a2c1 --- /dev/null +++ b/regress/base/msg_mp.1 @@ -0,0 +1,60 @@ +Mime-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----_=_NextPart_000_01BE1C09.8D2506D0" +Precedence: bulk + +------_=_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-- diff --git a/regress/base/multipart_io.sh b/regress/base/multipart_io.sh index 01ba7a0a..82d1808e 100644 --- a/regress/base/multipart_io.sh +++ b/regress/base/multipart_io.sh @@ -16,6 +16,7 @@ DIFF () { } DIFF $dir/msg_mp +DIFF $dir/msg_mp.1 DIFF $dir/msg_mp.2 exit 0; |
