Subject: Re: FWS problem

From: "Charles Lindsey" <[email-masked]>
Date: Mon, 3 Jan 2005 16:07:03 GMT

In <[email-masked]> Frank Ellermann <[email-masked]> writes:

>Charles Lindsey wrote:

>> only because of loud protests by the server implementors that
>> we agreed to make exceptions for the Newsgroups and Path
>> headers, etc, but only on account of the performance hits.

>Supersedes: is relevant for news servers, like Control:, where
>you also have only three [FWS] or in the fixed variant two *WSP
>and still one [FWS] in control-message.  No [CFWS] in Control:

No, [CFWS] should appear as normal in the Control header. That is a
mistake in USEFOR (cf draft-13), because the WG never asked for comments
to be disallowed in Control (the performance-hit argument would clearly
not apply).

>IMHO you should get rid of your special USEFOR msg-id, there's
>exactly one line where you use it:

>| message-id  = "Message-ID:" SP msg-id CRLF

>For Lines: you could say that it's now deprecated and the old
>syntax was Lines = "Lines:" SP *WSP 1*DIGIT *WSP CRLF

>That's no lie, and if somebody tries new tricks with deprecated
>headers, then old software might fail for Lines: (huge)9999(!)

>> If there is something you want to forbid in a standard (such
>> as empty header lines, etc), then it is an exceedingly Bad
>> Idea to have two mechanisms for forbidding it

>Then let's use your CWSP and WSPC trick.  It's a worse idea to
>say something as a MUST in the text and then something else in
>the syntax.  The [FWS] problem is already solved for 7+2 cases,
>or 7+1 cases if you insist on Lines: (over)999(lines)

>Only 5 (or 6) similar [CFWS] cases, all solved by your idea:

>| WSPC = *WSP [ comment [CFWS] ]

>Replace all (5 or 6) "leading" (near colon) [CFWS] by WSPC.

>| CWSP = [ [CFWS] comment ] *WSP

>Dito 5 or 6 "trailing" [CFWS] => CWSP (near CRLF), ready.
>For our most critical example of the References: I get

>| references  = "References:" SP msg-id-list CRLF
>| msg-id-list = CWSP msg-id-core *( CFWS msg-id-core ) WSPC

>That's a variant enforcing at least either a comment or a WSP
>between msg-ids, it allows (x)<y@z>(a)<b@c>(u)<v@w>(e) and
><y@z> <b@c> <v@w>, but not adjacent <y@z><b@c><v@w>.   The RfC
>2822 syntax is very similar:

>| references  = "References:" 1*msg-id CRLF
>| msg-id      = [CFWS] "<" id-left "@" id-right ">" [CFWS]

>You don't use it, because msg-id one of these overloaded terms:

>| msg-id      = [FWS] msg-id-core [FWS]

>Why not simply delete the special msg-id, and use msg-id-core ?

>  message-id  = "Message-ID:" SP *WSP msg-id-core *WSP CRLF

You may have a point there, but there is the problem that we use <msg-id>
all over the place in the semantics, and most of those now need to be
<msg-id-core>. So probably better to s/msg-id-core/msg-id/ throughout, and
give the necessary [CFWS], CFWS or [FWS] explicitly in the syntax in the
relevant headers.

-- 
Charles H. Lindsey ---------At Home, doing my own thing------------------------
Tel: +44 161 436 6131 Fax: +44 161 436 6133   Web: http://www.cs.man.ac.uk/~chl
Email: [email-masked]      Snail: 5 Clerewood Ave, CHEADLE, SK8 3JU, U.K.
PGP: 2C15F1A9      Fingerprint: 73 6D C2 51 93 A0 01 E7 65 E8 64 7E 14 A4 AB A5

---

From: Frank Ellermann <[email-masked]>
Date: Tue, 04 Jan 2005 03:14:05 +0100

Charles Lindsey wrote:

> [CFWS] should appear as normal in the Control header. That is
> a mistake in USEFOR (cf draft-13), because the WG never asked
> for comments to be disallowed in Control (the performance-hit
> argument would clearly not apply).

Control: cancel <unique@mdomain> / Supersedes; <unique@mdomain>
are common cases, and if an implementation has a problem with
[CFWS] in an ordinary Message-ID: <unique@mdomain> then why are
Control: cancel / Supersedes: <unique@mdomain> less critical ?

BTW, s-o-1036 allows a msg-id-list in Control: cancel, but you
stick to 1036 allowing only one msg-id, is this what you want ? 

 [remove the single instance of "msg-id"]
> You may have a point there, but there is the problem that we
> use <msg-id> all over the place in the semantics, and most of
> those now need to be <msg-id-core>. So probably better to
> s/msg-id-core/msg-id/ throughout, and give the necessary
> [CFWS], CFWS or [FWS] explicitly in the syntax in the
> relevant headers.

Yes, that's a good idea.  Normally I hate it when you redefine
a 2822 term instead of introducing a new term, but in this case
it's a feature:  Your msg-id = msg-id-core is in fact the real
thing, and we want it to replace msg-id also in 2822 (of course
without explicitly saying so ;-)
                                 Bye, Frank

---

From: "Charles Lindsey" <[email-masked]>
Date: Tue, 4 Jan 2005 12:37:07 GMT

>Control: cancel / Supersedes: <unique@mdomain> less critical ?

The problem is not with [CFWS] surrounding a <msg-id> as such, but with
transit servers which need to extract the Message-ID header from _every_
message passing through them, and for which ignoring any comment that
might be present would be a significant performance hit. That just is not
true of the Control and Supersedes headers, which are only of interest to
serving agents and which, when detected, are hived off to a separate piece
of code which can deconstruct them at leisure (since they form only a
small proportion of the overall article count).

Note that there is still a generic "SHOULD NOT generate yet" for all
comments in News headers that were not known in the days of 1036, but to
be fully compliant software MUST eventually be able to accept and ignore
them, since they are a general property of _all_ headers. The only
exceptions are the few that would slow down those transit servers too
much, where we have agreed a permanent ban on them.

>stick to 1036 allowing only one msg-id, is this what you want ?

That was a quirk of s-o-1036 and of CNews which was not implemented
anywhere else. The WG discussed and rejected the idea I don't know how
many years ago.