Re: [ogpx] type-system : eliminate closing tags for collections in binary serialization?

Joshua Bell <josh@lindenlab.com> Mon, 29 March 2010 15:38 UTC

Return-Path: <josh@lindenlab.com>
X-Original-To: ogpx@core3.amsl.com
Delivered-To: ogpx@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 004433A6AB7 for <ogpx@core3.amsl.com>; Mon, 29 Mar 2010 08:38:59 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 1.522
X-Spam-Level: *
X-Spam-Status: No, score=1.522 tagged_above=-999 required=5 tests=[AWL=-0.232, BAYES_50=0.001, DNS_FROM_OPENWHOIS=1.13, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9CtBlBMEBtxW for <ogpx@core3.amsl.com>; Mon, 29 Mar 2010 08:38:57 -0700 (PDT)
Received: from mail-wy0-f172.google.com (mail-wy0-f172.google.com [74.125.82.172]) by core3.amsl.com (Postfix) with ESMTP id 257F13A6AC5 for <ogpx@ietf.org>; Mon, 29 Mar 2010 08:38:50 -0700 (PDT)
Received: by wyb29 with SMTP id 29so5095184wyb.31 for <ogpx@ietf.org>; Mon, 29 Mar 2010 08:39:15 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.216.91.8 with HTTP; Mon, 29 Mar 2010 08:39:15 -0700 (PDT)
In-Reply-To: <b325928b1003281034x68725d0h555d608e4c8a5d36@mail.gmail.com>
References: <b325928b1003281034x68725d0h555d608e4c8a5d36@mail.gmail.com>
Date: Mon, 29 Mar 2010 08:39:15 -0700
Received: by 10.216.159.141 with SMTP id s13mr3253889wek.64.1269877155140; Mon, 29 Mar 2010 08:39:15 -0700 (PDT)
Message-ID: <f72742de1003290839p1be7574by531112ec180beeed@mail.gmail.com>
From: Joshua Bell <josh@lindenlab.com>
To: ogpx <ogpx@ietf.org>
Content-Type: multipart/alternative; boundary="0016e64f5de4bd99870482f250c4"
Subject: Re: [ogpx] type-system : eliminate closing tags for collections in binary serialization?
X-BeenThere: ogpx@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Virtual World Region Agent Protocol - IETF working group <ogpx.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/ogpx>, <mailto:ogpx-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/ogpx>
List-Post: <mailto:ogpx@ietf.org>
List-Help: <mailto:ogpx-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/ogpx>, <mailto:ogpx-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 29 Mar 2010 15:38:59 -0000

FYI, I've rather experimentally created a ticket in the VWRAP trac for this:

http://trac.tools.ietf.org/wg/vwrap/trac/ticket/1

<http://trac.tools.ietf.org/wg/vwrap/trac/ticket/1>A list of active tickets
and links to RSS feeds (etc) can be found at:

http://trac.tools.ietf.org/wg/vwrap/trac/report/1

On Sun, Mar 28, 2010 at 10:34 AM, Meadhbh Hamrick <ohmeadhbh@gmail.com>wrote:

> so... just an idea...
>
> the current type system draft, draft-hamrick-vwrap-type-system-00,
> requires that maps or arrays that are serialized using the binary
> serialization scheme have a closing tag in addition to an opening tag.
> for example, to serialize the map:
>
> {
>  foo : string,
>  bar : integer
> }
>
> you would use an opening tag of a left curly brace ('{') followed by a
> 32 bit count of the number of elements in the map, followed by the two
> elements, followed by a closing tag of a right curly brace.
>
> i have a vague concern that the closing tag is unneeded, may confuse
> implementers and could lead to security concerns (at worst) or generic
> errors (at best.) specifically, what happens when you don't have a
> closing tag following the last element in the collection?
>
> i don't think this is a "big deal," and we can certainly provide
> guidance for implementers with properly worded statements about how we
> think such situations should be handled.
>
> and i think that making this change would require both opensim and LL
> to modify their code, so i can totally understand if peeps would
> rather keep the closing tag for collections.
>
> but.. i think it would be a good idea to either a) eliminate the
> closing tags or b) add some guidance to implementers about handling
> encoding errors. i have a separate email coming up for guidance.
>
> so, assuming we wanted to eliminate closing tags, we might want to
> change section 4.3 to read thusly.
>
> 4.3. Binary Serialization
>
>   The LLSD Binary Serialization is an encoding syntax appropriate for
>   situations where high message entropy is required or limiting
>   processing power for parsing messages is available.
>
>   Encoding LLSD structured data using the binary serialization scheme
>   involves generating tag, (optional) size values, and serialization of
>   simple values.  Composite types are serialized by iterating across
>   all members of the collection, serializing each simple or composite
>   member in turn.  For each element in an
>   LLSD structured data object, the following process is used to
>   generate a binary output stream of serialized data:
>
>   o  A one octet type tag is emitted to the output stream.  See the
>      table below for tag octets.
>
>   o  If the size of the element being serialized is variable (as it
>      will be for strings, URIs, arrays and maps), the size or length of
>      the element is output to the stream as a network-order 32 bit
>      value.  Elements of types with fixed lengths such as undefined
>      values, booleans, integers, reals, UUIDs and dates will not
>      include size information in the output stream.
>
>   o  Finally, the binary representation of the element is appended to
>      the output stream.
>
>   Undefined  Undefined values are serialized with a single exclamation
>       point character ('!').  Undefined values append neither size
>       information or data to the output stream.
>
>   Boolean  True values are serialized with a single '1' character.
>       False values are serialized with a single '0' character.
>       Booleans append neither size information or data to the output
>       stream.
>
>   Integer  Integer values are serialized by emitting the 'i' character
>       to the output stream followed by the four octets representing the
>       integer's 32 bits in network order.
>
>   Real  Real values are serialized by emitting the 'r' character to the
>       output stream followed by the eight octets representing the real
>       value's 64 bits in network order.
>
>   String  String values are serialized by emitting the 's' character to
>       the output stream followed by the string's length in octets
>       represented as a network-order 32 bit integer, followed by the
>       string's UTF-8 encoding.
>
>   UUID  UUID values are serialized by emitting the 'u' character to the
>       output stream followed by the sixteen octets representing the
>       UUID's 128 bits, with the most significant byte coming first.
>
>   Date  Date values are serialized by emitting the 'd' character to the
>       output stream followed by the number of seconds since the start
>       of the epoch, represented as a 64-bit real value.
>
>   URI URI values are serialized by emitting the 'l' character to the
>       output stream followed by the URI's length in octets represented
>       as a network-order 32 bit integer, followed by the binary
>       representation of the URI.
>
>   Binary  Binary values are serialized by emitting the 'b' character to
>       the output stream followed by the binary array's length in octets
>       represented as a network-order 32 bit integer, followed by the
>       octets of the binary array.
>
>   Array  Arrays are serialized by emitting the left square bracket
>       ('[') character, followed by the count of objects in the array
>       represented as a network-order 32 bit integer, followed by each
>       array element in order.  Note that compliant implementations MUST
>       preserve the order of array elements.
>
>   Map Maps are serialized by emitting the left curly brace ('{')
>       character, followed by the count of objects in the map
>       represented as a network-order 32 bit integer, followed by each
>       key-value element.  Map keys are represented as strings except
>       that they use the character 'k' instead of the character 's' as a
>       tag.  Note that preserving the order of maps is not REQUIRED.
>
> -cheers
> -meadhbh
>
> --
> meadhbh hamrick * it's pronounced "maeve"
> @OhMeadhbh * http://meadhbh.org/ * OhMeadhbh@gmail.com
> _______________________________________________
> ogpx mailing list (VWRAP working group)
> ogpx@ietf.org
> https://www.ietf.org/mailman/listinfo/ogpx
>