[Dovecot] CATENATE/literal8 issue
Michael M Slusarz
slusarz at curecanti.org
Thu Jun 13 17:35:20 EEST 2013
Quoting Timo Sirainen <tss at iki.fi>:
> On Wed, 2013-05-22 at 09:38 -0600, Michael M Slusarz wrote:
>> Quoting Michael M Slusarz <slusarz at curecanti.org>:
>>
>> > Quoting Timo Sirainen <tss at iki.fi>:
>> >
>> >> Anyway .. the BINARY APPEND converts only the MIME parts that you
>> >> send with "Content-Transfer-Encoding: binary". Are you sending such
>> >> header to Dovecot?
>>
>> I can verify this isn't working as you described above:
>>
>> 1 APPEND "INBOX" CATENATE (TEXT {49+}
>> Content-Type: multipart/alternative; boundary="A" TEXT ~{1}
>> 1 NO [UNKNOWN-CTE] Binary input allowed only when the first part is binary.
>
> What do you do then if server advertises CATENATE but not BINARY?
Send as a regular literal. If there truly are nulls in the output,
there's not much we can do so we send as-is and hope for the best.
> Anyway for the other possibilities Dovecot could:
>
> a) Put all CATENATEd messages through the istream-binary-converter, but
> just not do any actual C-T-E:binary conversion until the first ~{binary}
> part is found.
>
> b) Just treat ~{n} exactly the same as ~{n}, unless it's the first part
> of CATENATE.
>
> Maybe this should be aked about in IMAP mailing list .. (Didn't I
> already ask something about CATENATE+BINARY combination?)
Yeah:
http://mailman2.u.washington.edu/pipermail/imap-protocol/2012-June/001787.html
No responses :)
It is concerning because RFC 4466 indicates that literal8's are
allowed for both APPEND and MULTIAPPEND, which is essentially an
extended APPEND. But RFC 4469 defines CATENATE TEXT as literal only:
RFC 4466:
append-data = literal / literal8 / append-data-ext
RFC 4469:
append-data =/ "CATENATE" SP "(" cat-part *(SP cat-part) ")"
cat-part = text-literal / url
text-literal = "TEXT" SP literal
To me CATENATE =~ MULTIAPPEND - it is just another form of an extended
APPEND. Not sure why it shouldn't be allowed there. But from a
strict ABNF standpoint, you are correct that I shouldn't be sending
literal8's. I'll ask myself on the IMAP list why this design choice
was made.
For the record... given the varying levels of BINARY support in
different IMAP servers (UW IMAP is flat-out broken), I've gone ahead
and bit the bullet and we now pre-scan outgoing append literals for
null characters and only use literal8's when absolutely necessary. I
was probably being too clever for my own good in assuming that I can
just send and assume the server will handle all issues.
With that being said... I was able to reliably reproduce a parsing
issue in Dovecot 2.2.x when doing a MULTIAPPEND w/literal8's. I need
to track down if this is a single message causing the issue or some
sort of cumulative bug that only appears once you've done something
like 200-300 sequential appends. I can verify that a switch from
literal8 -> literal fixes the issue. I'll try to create a
reproducible test case.
michael
More information about the dovecot
mailing list