RFC Errata

Errata Search

Source of RFC  
Summary Table Full Records


Note: This RFC has been obsoleted by RFC 2822

Note: This RFC has been updated by RFC 1123, RFC 2156, RFC 1327, RFC 1138, RFC 1148

Source of RFC: Legacy
Area Assignment: app

Errata ID: 3408
Status: Held for Document Update
Type: Technical
Publication Format(s) : TEXT

Reported By: Thomas Lane
Date Reported: 2012-11-14
Held for Document Update by: Pete Resnick
Date Held: 2013-01-28

Section 3.3 says:

quoted-string = <"> *(qtext/quoted-pair) <">; Regular qtext or
                                            ; quoted chars.


domain-literal =  "[" *(dtext / quoted-pair) "]"


comment     =  "(" *(ctext / quoted-pair / comment) ")"

It should say:

quoted-string = <"> *(qtext/quoted-pair) <">; Regular qtext or
                                            ; quoted chars.
                                            ; Bare LF MUST NOT
                                            ; follow the
                                            ; quoted-pair \ CR


domain-literal =  "[" *(dtext / quoted-pair) "]" ; Bare LF MUST NOT
                                                 ; follow the
                                                 ; quoted-pair \ CR


comment     =  "(" *(ctext / quoted-pair / comment) ")" ; Bare LF MUST NOT
                                                        ; follow the
                                                        ; quoted-pair \ CR


In Section B.1, the intent is made clear that an implementer should be able to read fields with minimal processing, and find their ends anywhere CRLF is not followed by a LWSP-char.

The current BNF allows the sequence \ CR LF, where \ CR is a quoted-pair, inside a quoted-string, domain-literal, or comment in a structured field. An unstructured field may be any sequence of text, so the last character of an unstructured field could be \, and the field would end with \ CR LF. So, robust minimal processing of fields does not work without this correction.


-- Unstructured field terminates here.
Subject: evil = "this \[CRLF]

-- Structured field does not terminate here, as written.
Structured-Field: evil = "this \[CRLF] <-- quoted-pair, bare LF as qtext"

Conclusion: The plan in appendix B does not work if the quoted-pair \ CR may be followed by a bare LF: the implementer would need to know whether a field is structured or unstructured to know where it terminates. So, this must just be an oversight.

I realize this oversight is eliminated in less obsolete documents 2822 and 5322, but (1) many other RFCs reference RFC 822 and not the less obsolete documents, and (2) the less obsolete documents do not specifically discuss this issue or release receivers from parsing messages generated according to this specification.

It is unclear whether the original authors of 822 would have required no bare LF after a CR quoted-pair or would have changed appendix B to accommodate quoted-pairs. The IESG guidelines for errata say that errata on obsolete document that are still in use should be treated the same as errata on current documents. Since it's not clear where the error is, and since this has been dealt with in 2822/5322, this erratum is marked as "Hold".

Report New Errata

Advanced Search