RFC Errata
RFC 5234, "Augmented BNF for Syntax Specifications: ABNF", January 2008
Note: This RFC has been updated by RFC 7405
Source of RFC: IETF - NON WORKING GROUPArea Assignment: app
See Also: RFC 5234 w/ inline errata
Errata ID: 3076
Status: Verified
Type: Technical
Publication Format(s) : TEXT
Reported By: Daniel van Vugt
Date Reported: 2012-01-04
Verifier Name: Pete Resnick
Date Verified: 2013-01-28
Section 4 says:
rulelist = 1*( rule / (*c-wsp c-nl) )
It should say:
rulelist = 1*( rule / (*WSP c-nl) )
Notes:
This errata is very similar to errata 2968, but different.
The grammar in section 4 is ambiguous. This ambiguity is revealed using 7 characters of input:
';' <CR> <LF> <SP> ';' <CR> <LF>
which produces 2 different matches (please forgive my program output):
rulelist @ 0 len 7
rulelist1 @ 0 len 3
star_c_wsp @ 0 len 0
c_nl @ 0 len 3
comment @ 0 len 3 ";\r\n"
CRLF @ 1 len 2
CR @ 1 len 1
LF @ 2 len 1
rulelist1 @ 3 len 4
star_c_wsp @ 3 len 1
c_wsp @ 3 len 1
WSP @ 3 len 1
SP @ 3 len 1
c_nl @ 4 len 3
comment @ 4 len 3 ";\r\n"
CRLF @ 5 len 2
CR @ 5 len 1
LF @ 6 len 1
-----------
rulelist @ 0 len 7
rulelist1 @ 0 len 7
star_c_wsp @ 0 len 4
c_wsp @ 0 len 4
c_nl @ 0 len 3
comment @ 0 len 3 ";\r\n"
CRLF @ 1 len 2
CR @ 1 len 1
LF @ 2 len 1
WSP @ 3 len 1
SP @ 3 len 1
c_nl @ 4 len 3
comment @ 4 len 3 ";\r\n"
CRLF @ 5 len 2
CR @ 5 len 1
LF @ 6 len 1
-----------
A solution to this ambiguity, which I have verified works, is:
rulelist = 1*( rule / (*WSP c-nl) )
This prevents the c-nl inside c-wsp from getting confused with the c-nl in rulelist.
--VERIFIER NOTES--
The current document is clearly incorrect. However, though the solution appears correct, it has not been tested.