Difference between revisions of "RFC6868"

From RFC-Wiki
imported>Admin
(Created page with " Internet Engineering Task Force (IETF) C. Daboo Request for Comments: 6868 Apple Updates: 5545, 6321, 63...")
 
 
Line 1: Line 1:
 
 
 
 
 
 
 
Internet Engineering Task Force (IETF)                          C. Daboo
 
Internet Engineering Task Force (IETF)                          C. Daboo
 
Request for Comments: 6868                                        Apple
 
Request for Comments: 6868                                        Apple
Line 10: Line 4:
 
Category: Standards Track
 
Category: Standards Track
 
ISSN: 2070-1721
 
ISSN: 2070-1721
 
  
 
         Parameter Value Encoding in iCalendar and vCard
 
         Parameter Value Encoding in iCalendar and vCard
  
Abstract
+
'''Abstract'''
  
 
This specification updates the data formats for iCalendar ([[RFC5545|RFC 5545]])
 
This specification updates the data formats for iCalendar ([[RFC5545|RFC 5545]])
Line 20: Line 13:
 
characters forbidden by the existing specifications.
 
characters forbidden by the existing specifications.
  
Status of This Memo
+
'''Status of This Memo'''
  
 
This is an Internet Standards Track document.
 
This is an Internet Standards Track document.
Line 34: Line 27:
 
http://www.rfc-editor.org/info/rfc6868.
 
http://www.rfc-editor.org/info/rfc6868.
  
Copyright Notice
+
'''Copyright Notice'''
  
 
Copyright (c) 2013 IETF Trust and the persons identified as the
 
Copyright (c) 2013 IETF Trust and the persons identified as the
Line 48: Line 41:
 
the Trust Legal Provisions and are provided without warranty as
 
the Trust Legal Provisions and are provided without warranty as
 
described in the Simplified BSD License.
 
described in the Simplified BSD License.
 
 
 
 
 
 
 
 
 
  
 
== Introduction ==
 
== Introduction ==
  
The iCalendar [RFC5545] specification defines a standard way to
+
The iCalendar [[RFC5545]] specification defines a standard way to
describe calendar data.  The vCard [RFC6350] specification defines a
+
describe calendar data.  The vCard [[RFC6350]] specification defines a
 
standard way to describe contact data.  Both of these use a similar
 
standard way to describe contact data.  Both of these use a similar
 
text-based data format.  Each iCalendar and vCard data object can
 
text-based data format.  Each iCalendar and vCard data object can
Line 86: Line 70:
 
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
 
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
 
"OPTIONAL" in this document are to be interpreted as described in
 
"OPTIONAL" in this document are to be interpreted as described in
[RFC2119].
+
[[RFC2119]].
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
== Parameter Value Encoding Scheme ==
 
== Parameter Value Encoding Scheme ==
Line 104: Line 77:
 
Accent) as an escape character in parameter values whose value type
 
Accent) as an escape character in parameter values whose value type
 
is defined using the "param-value" syntax element (Section 3.1 of
 
is defined using the "param-value" syntax element (Section 3.1 of
iCalendar [RFC5545] and Section 3.3 of vCard [RFC6350]).  The
+
iCalendar [[RFC5545]] and Section 3.3 of vCard [[RFC6350]]).  The
 
^-escaping mechanism can be used when the value is either unquoted or
 
^-escaping mechanism can be used when the value is either unquoted or
 
quoted (i.e., whether or not the value is surrounded by double-
 
quoted (i.e., whether or not the value is surrounded by double-
Line 137: Line 110:
 
When converting between iCalendar and vCard text-based data formats
 
When converting between iCalendar and vCard text-based data formats
 
and alternative data-format representations such as XML (as described
 
and alternative data-format representations such as XML (as described
in [RFC6321] and [RFC6351], respectively), implementations MUST
+
in [[RFC6321]] and [[RFC6351]], respectively), implementations MUST
 
ensure that parameter value escape sequences are generated correctly
 
ensure that parameter value escape sequences are generated correctly
 
in the text-based format and are decoded when the parameter values
 
in the text-based format and are decoded when the parameter values
 
appear in the alternate data formats.
 
appear in the alternate data formats.
 
 
 
 
 
 
 
 
 
 
  
 
=== iCalendar Example ===
 
=== iCalendar Example ===
Line 185: Line 148:
  
 
There are no additional security issues beyond those of iCalendar
 
There are no additional security issues beyond those of iCalendar
[RFC5545] and vCard [RFC6350].
+
[[RFC5545]] and vCard [[RFC6350]].
  
 
== Acknowledgments ==
 
== Acknowledgments ==
Line 191: Line 154:
 
Thanks to Michael Angstadt, Tim Bray, Mike Douglass, Barry Leiba,
 
Thanks to Michael Angstadt, Tim Bray, Mike Douglass, Barry Leiba,
 
Simon Perreault, and Pete Resnick for feedback on this specification.
 
Simon Perreault, and Pete Resnick for feedback on this specification.
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
== Normative References ==
 
== Normative References ==
  
[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
+
[[RFC2119]]  Bradner, S., "Key words for use in RFCs to Indicate
 
           Requirement Levels", [[BCP14|BCP 14]], [[RFC2119|RFC 2119]], March 1997.
 
           Requirement Levels", [[BCP14|BCP 14]], [[RFC2119|RFC 2119]], March 1997.
  
[RFC5545]  Desruisseaux, B., "Internet Calendaring and Scheduling
+
[[RFC5545]]  Desruisseaux, B., "Internet Calendaring and Scheduling
 
           Core Object Specification (iCalendar)", [[RFC5545|RFC 5545]],
 
           Core Object Specification (iCalendar)", [[RFC5545|RFC 5545]],
 
           September 2009.
 
           September 2009.
  
[RFC6321]  Daboo, C., Douglass, M., and S. Lees, "xCal: The XML
+
[[RFC6321]]  Daboo, C., Douglass, M., and S. Lees, "xCal: The XML
 
           Format for iCalendar", [[RFC6321|RFC 6321]], August 2011.
 
           Format for iCalendar", [[RFC6321|RFC 6321]], August 2011.
  
[RFC6350]  Perreault, S., "vCard Format Specification", [[RFC6350|RFC 6350]],
+
[[RFC6350]]  Perreault, S., "vCard Format Specification", [[RFC6350|RFC 6350]],
 
           August 2011.
 
           August 2011.
  
[RFC6351]  Perreault, S., "xCard: vCard XML Representation",
+
[[RFC6351]]  Perreault, S., "xCard: vCard XML Representation",
 
           [[RFC6351|RFC 6351]], August 2011.
 
           [[RFC6351|RFC 6351]], August 2011.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
Appendix A.  Choice of Quoting Mechanism
 
Appendix A.  Choice of Quoting Mechanism
Line 299: Line 214:
 
used, and it ought to be one least likely to be found in existing
 
used, and it ought to be one least likely to be found in existing
 
data.
 
data.
 
 
 
 
 
 
 
 
 
 
 
  
 
Author's Address
 
Author's Address
Line 321: Line 225:
  
 
URI:  http://www.apple.com/
 
URI:  http://www.apple.com/
 +
 +
[[Category:Standards Track]]

Latest revision as of 20:20, 1 October 2020

Internet Engineering Task Force (IETF) C. Daboo Request for Comments: 6868 Apple Updates: 5545, 6321, 6350, 6351 February 2013 Category: Standards Track ISSN: 2070-1721

        Parameter Value Encoding in iCalendar and vCard

Abstract

This specification updates the data formats for iCalendar (RFC 5545) and vCard (RFC 6350) to allow parameter values to include certain characters forbidden by the existing specifications.

Status of This Memo

This is an Internet Standards Track document.

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc6868.

Copyright Notice

Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

Introduction

The iCalendar RFC5545 specification defines a standard way to describe calendar data. The vCard RFC6350 specification defines a standard way to describe contact data. Both of these use a similar text-based data format. Each iCalendar and vCard data object can include "properties" that have "parameters" and a "value". The value of a "parameter" is typically a token or URI value, but a "generic" text value is also allowed. However, the syntax rules for both iCalendar and vCard prevent the use of a double-quote character or control characters in such values, though double-quote characters and some subset of control characters are allowed in the actual property values.

As more and more extensions are being developed for these data formats, there is a need to allow at least double-quotes and line feeds to be included in parameter values. The \-escaping mechanism used for property text values is not defined for use with parameter values and cannot be easily used in a backwards-compatible manner. This specification defines a new character escaping mechanism, compatible with existing parsers and chosen to minimize any impact on existing data.

Conventions Used in This Document

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC2119.

Parameter Value Encoding Scheme

This specification defines the ^ character (U+005E -- Circumflex Accent) as an escape character in parameter values whose value type is defined using the "param-value" syntax element (Section 3.1 of iCalendar RFC5545 and Section 3.3 of vCard RFC6350). The ^-escaping mechanism can be used when the value is either unquoted or quoted (i.e., whether or not the value is surrounded by double- quotes).

When generating iCalendar or vCard parameter values, the following apply:

o formatted text line breaks are encoded into ^n (U+005E, U+006E)

o the ^ character (U+005E) is encoded into ^^ (U+005E, U+005E)

o the " character (U+0022) is encoded into ^' (U+005E, U+0027)

When parsing iCalendar or vCard parameter values, the following apply:

o the character sequence ^n (U+005E, U+006E) is decoded into an

  appropriate formatted line break according to the type of system
  being used

o the character sequence ^^ (U+005E, U+005E) is decoded into the ^

  character (U+005E)

o the character sequence ^' (U+005E, U+0027) is decoded into the "

  character (U+0022)

o if a ^ (U+005E) character is followed by any character other than

  the ones above, parsers MUST leave both the ^ and the following
  character in place

When converting between iCalendar and vCard text-based data formats and alternative data-format representations such as XML (as described in RFC6321 and RFC6351, respectively), implementations MUST ensure that parameter value escape sequences are generated correctly in the text-based format and are decoded when the parameter values appear in the alternate data formats.

iCalendar Example

The following example is an "ATTENDEE" property with a "CN" parameter whose value includes two double-quote characters. The parameter value is not quoted, as there are no characters in the value that would trigger quoting as required by iCalendar.

ATTENDEE;CN=George Herman ^'Babe^' Ruth:mailto:[email protected]

The unescaped parameter value is

George Herman "Babe" Ruth

vCard Example

The following example is a "GEO" property with an "X-ADDRESS" parameter whose value includes several line feed characters. The parameter value is also quoted, since it contains a comma, which triggers quoting as required by vCard.

GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt

sburgh, PA 15212":geo:40.446816,-80.00566

The unescaped parameter value (where each line is terminated by a line break character sequence) is

Pittsburgh Pirates 115 Federal St Pittsburgh, PA 15212

Security Considerations

There are no additional security issues beyond those of iCalendar RFC5545 and vCard RFC6350.

Acknowledgments

Thanks to Michael Angstadt, Tim Bray, Mike Douglass, Barry Leiba, Simon Perreault, and Pete Resnick for feedback on this specification.

Normative References

RFC2119 Bradner, S., "Key words for use in RFCs to Indicate

          Requirement Levels", BCP 14, RFC 2119, March 1997.

RFC5545 Desruisseaux, B., "Internet Calendaring and Scheduling

          Core Object Specification (iCalendar)", RFC 5545,
          September 2009.

RFC6321 Daboo, C., Douglass, M., and S. Lees, "xCal: The XML

          Format for iCalendar", RFC 6321, August 2011.

RFC6350 Perreault, S., "vCard Format Specification", RFC 6350,

          August 2011.

RFC6351 Perreault, S., "xCard: vCard XML Representation",

          RFC 6351, August 2011.

Appendix A. Choice of Quoting Mechanism

Having recognized the need for escaping parameter values, the question is what mechanism to use? One obvious choice would be to adopt the \-escaping used for property values. However, that could not be used as-is, because it escapes a double-quote as the sequence of \ followed by double-quote. Consider what the example in Section 3.1 might look like using \-escaping:

ATTENDEE;CN="George Herman \"Babe\" Ruth":mailto:[email protected]

Existing iCalendar/vCard parsers know nothing about escape sequences in parameters. So they would parse the parameter value as:

George Herman \

i.e., the text between the first and second occurrence of a double- quote. However, the text after the second double-quote ought to be either a : or a ; (to delimit the parameter value from the following parameter or property) but is not, so the parser could legitimately throw an error at that point because the data is syntactically invalid. Thus, for backwards-compatibility reasons, a double-quote cannot be escaped using a sequence that itself includes a double- quote, and hence the choice of using a single-quote in this specification.

Another option would be to use a form of \-escaping modified for use in parameter values only. However, some incorrect, non-interoperable use of \ in parameter values has been observed, and thus it is best to steer clear of that to achieve guaranteed, reliable interoperability. Also, given that double-quote gets changed to single-quote in the escape sequence for a parameter, but not for a value, it is better to not give the impression that the same escape mechanism (and thus code) can be used for both (which could lead to other issues, such as an implementation incorrectly escaping a ; as \; as opposed to quoting the parameter value).

The choice of ^ as the escape character was made based on the requirement that an ASCII symbol (non-alphanumeric character) be used, and it ought to be one least likely to be found in existing data.

Author's Address

Cyrus Daboo Apple Inc. 1 Infinite Loop Cupertino, CA 95014 USA

EMail: [email protected] URI: http://www.apple.com/