[Ndn-interest] issue in the NDN packet encoding spec 0.3.0
Junxiao Shi
shijunxiao at email.arizona.edu
Fri Jun 7 09:13:50 PDT 2019
Hi Nick
Thanks for reporting this issue. I have entered this bug as
https://redmine.named-data.net/issues/4946 , and the fix has been merged.
Yours, Junxiao
On Mon, May 20, 2019, 13:47 Nick Briggs via Ndn-interest <
ndn-interest at lists.cs.ucla.edu> wrote:
> I was reading through the NDN packet spec, at
> https://named-data.net/doc/NDN-packet-spec/current/tlv.html, currently
> documenting version 0.3, and noticed an issue as follows:
>
> When the variable length encoding for Type and Length was specified there
> was no requirement to use the minimum length encoding for any given value.
> That is, a length of 0x20 MAY be encoded as 0x20, or 0xFD0020, or
> 0xFE00000020, or even 0xFF0000000000000020.
>
> This has consequences in the canonical ordering and matching code as
> specified in https://named-data.net/doc/NDN-packet-spec/current/name.html
> -- the suggestion that one can use "memcmp" on the wire encoding of the
> Name field's TLV-VALUE is incorrect. As currently specified, even a simple
> equality match for Names must decode each individual T and L value from the
> top level Name TLV through the component T and L values.
>
> If components component1 and component2 have different types, then
>
> - component1 is less than component2 if numerical value of
> TLV-TYPE(component1) is less than numerical value of
> TLV-TYPE(component2)
>
>
> For example, the numerical value of TLV-TYPE encoded as 0x42 is equal to
> that of a TLV-TYPE encoded 0xFD0042)
>
>
> - If components have the same type, then
>
> - If a is shorter than b (i.e., has fewer bytes), then a comes before b
> .
> - If a and b have the same length, then they are compared in
> lexicographic order based on absolute value of octet values (e.g., ordering
> based on memcmp() operation.)
>
>
> again, if TLV-LENGTH(a) was encoded 0x20 and TLV-LENGTH(b) was encoded
> 0xFD0010 a simple memcmp as specified in
>
> The canonical order can be enforced by directly comparing the wire
> encoding of the Name field’s TLV-VALUE (i.e., excluding TLV-TYPE and
> TLV-LEGNTH of the whole Name TLV):
>
> intcanonicalOrder(Name lhs, Name rhs) {
> int result = memcmp(lhs.value(), rhs.value(), min(lhs.value_size(), rhs.value_size()));
> if (result == 0) {
> result = lhs.value_size() - rhs.value_size();
> }
> return result;}
>
> will produced an incorrect result.
>
> You probably need to say that a VAR-NUMBER MUST use the minimum length
> encoding necessary to represent the value and that failure to do so will
> result in unspecified behavior.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/ndn-interest/attachments/20190607/747caa69/attachment.html>
More information about the Ndn-interest
mailing list