Format 3, step 6c: the vectors of paths, keys, heads and security
The vector files of spec 67 for format 3, generated with the result
each case is written for, so that the generator fails when the
implementation or the tables change:
- paths.json: 83 paths with the result of the rules of one entry, the
violation worded as every implementation must word it, and 16 trees,
the paths of a head and the result of decoding it: U+00A0, accepted,
and U+3000, R6c, at both ends of a segment; best-fit, full-width
forms, U+00B4 of cp1253; 8.3 aliases with ~1; Cn; U+206A to U+206F,
tags and other ignorables; a dot and ZWJ, and ZWJ alone; 127 and 85
times U+0390; U+F03A; .datekeys-x at two levels; U+FF5E and U+1F600
in both orders; ab with and without ZWNJ; U+00BF, U+00A7 and U+2665,
accepted; VS16 after U+2764 and after a; ZWJ at the start, at the end
and twice; the rainbow flag and the flag of Scotland; b/.. and a.
- path_fold.json: 22 segments with their NFD and their key of R7,
among them the entries F of CaseFolding, the dotless i, the Kelvin
and Angstrom signs, Cherokee, Hangul and the whitelist dropped
before NFD.
- head_schema.json: 63 heads through layers 2, 3 and 4, in key order,
with the violation of each ERR_HEAD_INVALID; they add comments with
tags and with loose variation selectors.
- security.json: 21 areas with their verdicts, X, F0, F1, S0, S1 and
S2, among them key 2 that is not a byte string, a key 4, a byte more,
alg 0, an empty key with the seal intact, and a seal that breaks its
schema with an unknown seal_type.
- cbor.json gains the control of schema version 3.
A test replays every committed vector through the implementation, and
another checks that the files are current.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 week ago
{
"spec" : "0.16" ,
Format 3, step 6c: the vectors of paths, keys, heads and security
The vector files of spec 67 for format 3, generated with the result
each case is written for, so that the generator fails when the
implementation or the tables change:
- paths.json: 83 paths with the result of the rules of one entry, the
violation worded as every implementation must word it, and 16 trees,
the paths of a head and the result of decoding it: U+00A0, accepted,
and U+3000, R6c, at both ends of a segment; best-fit, full-width
forms, U+00B4 of cp1253; 8.3 aliases with ~1; Cn; U+206A to U+206F,
tags and other ignorables; a dot and ZWJ, and ZWJ alone; 127 and 85
times U+0390; U+F03A; .datekeys-x at two levels; U+FF5E and U+1F600
in both orders; ab with and without ZWNJ; U+00BF, U+00A7 and U+2665,
accepted; VS16 after U+2764 and after a; ZWJ at the start, at the end
and twice; the rainbow flag and the flag of Scotland; b/.. and a.
- path_fold.json: 22 segments with their NFD and their key of R7,
among them the entries F of CaseFolding, the dotless i, the Kelvin
and Angstrom signs, Cherokee, Hangul and the whitelist dropped
before NFD.
- head_schema.json: 63 heads through layers 2, 3 and 4, in key order,
with the violation of each ERR_HEAD_INVALID; they add comments with
tags and with loose variation selectors.
- security.json: 21 areas with their verdicts, X, F0, F1, S0, S1 and
S2, among them key 2 that is not a byte string, a key 4, a byte more,
alg 0, an empty key with the seal intact, and a seal that breaks its
schema with an unknown seal_type.
- cbor.json gains the control of schema version 3.
A test replays every committed vector through the implementation, and
another checks that the files are current.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 week ago
"description" : "Paths of a format 3 head (spec §29.5) with the Unicode 18.0.0 and best-fit tables of §29.5.1, generated by the reference implementation. paths: one path and the rules of one entry, R2 to R6c and R10; trees: the paths of a head, of 0 bytes each, and the result of decoding it. See testdata/README.md." ,
"unicode_version" : "18.0.0" ,
pathrule: the simple lower case of Unicode 18.0.0
The key of words lowers each code point with the simple mapping of
UnicodeData.txt, field 13, of Unicode 18.0.0 (spec v0.11, 38.1), not
with unicode.ToLower, which carries Unicode 15.0.0: U+A7CB lowers to
U+0264 in Unicode 16.0 and later, and a key made in the page, whose
platform knows it, would not open in the CLI.
The generator writes the table for Go and for datekeys-ts, and the
canonical text gains its lines, so TablesDigest changes; paths.json and
path_fold.json record the new one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6 days ago
"tables_digest" : "07cf5d54aea1cd13a3ecef14a06976cc49a3cdad755cf9bc10395178b93aeb07" ,
Format 3, step 6c: the vectors of paths, keys, heads and security
The vector files of spec 67 for format 3, generated with the result
each case is written for, so that the generator fails when the
implementation or the tables change:
- paths.json: 83 paths with the result of the rules of one entry, the
violation worded as every implementation must word it, and 16 trees,
the paths of a head and the result of decoding it: U+00A0, accepted,
and U+3000, R6c, at both ends of a segment; best-fit, full-width
forms, U+00B4 of cp1253; 8.3 aliases with ~1; Cn; U+206A to U+206F,
tags and other ignorables; a dot and ZWJ, and ZWJ alone; 127 and 85
times U+0390; U+F03A; .datekeys-x at two levels; U+FF5E and U+1F600
in both orders; ab with and without ZWNJ; U+00BF, U+00A7 and U+2665,
accepted; VS16 after U+2764 and after a; ZWJ at the start, at the end
and twice; the rainbow flag and the flag of Scotland; b/.. and a.
- path_fold.json: 22 segments with their NFD and their key of R7,
among them the entries F of CaseFolding, the dotless i, the Kelvin
and Angstrom signs, Cherokee, Hangul and the whitelist dropped
before NFD.
- head_schema.json: 63 heads through layers 2, 3 and 4, in key order,
with the violation of each ERR_HEAD_INVALID; they add comments with
tags and with loose variation selectors.
- security.json: 21 areas with their verdicts, X, F0, F1, S0, S1 and
S2, among them key 2 that is not a byte string, a key 4, a byte more,
alg 0, an empty key with the seal intact, and a seal that breaks its
schema with an unknown seal_type.
- cbor.json gains the control of schema version 3.
A test replays every committed vector through the implementation, and
another checks that the files are current.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 week ago
"paths" : [
{
"name" : "a file" ,
"path" : "nota.txt" ,
"result" : "ok"
} ,
{
"name" : "a file in two folders" ,
"path" : "fotos/2025/playa.jpg" ,
"result" : "ok"
} ,
{
"name" : "non-ASCII letters" ,
"path" : "música/canción.txt" ,
"result" : "ok"
} ,
{
"name" : "U+00BF, which bestfit1250 maps to '?'" ,
"path" : "¿Qué es esto.jpg" ,
"result" : "ok"
} ,
{
"name" : "U+00A7, which bestfit874 maps to a C0 control" ,
"path" : "§ 3 contrato.pdf" ,
"result" : "ok"
} ,
{
"name" : "U+2665, which bestfit874 maps to a C0 control" ,
"path" : "Para ti ♥.jpg" ,
"result" : "ok"
} ,
{
"name" : "U+2192, which bestfit1253 maps to '\u003e'" ,
"path" : "Madrid → Lisboa" ,
"result" : "ok"
} ,
{
"name" : "U+00A0 at the start of a segment: no table maps it to ASCII" ,
"path" : " a" ,
"result" : "ok"
} ,
{
"name" : "U+00A0 at the end of a segment" ,
"path" : "a " ,
"result" : "ok"
} ,
{
"name" : "U+3000 at the start: bestfit1250 and others map it to U+0020" ,
"path" : " a" ,
"result" : "R6c: segment 1: code page 1250 maps the segment to one that breaks R5: the segment starts with U+0020"
} ,
{
"name" : "U+3000 at the end" ,
"path" : "a " ,
"result" : "R6c: segment 1: code page 1250 maps the segment to one that breaks R5: the segment ends with U+0020"
} ,
{
"name" : "CON.txt in full-width forms" ,
"path" : "C O N .txt" ,
"result" : "R6c: segment 1: code page 874 maps the segment to one that breaks R6: CON is a reserved device name"
} ,
{
"name" : "U+2216 SET MINUS" ,
"path" : "a∖ b" ,
"result" : "R6c: segment 1: code page 1250 maps the segment to one with U+005C"
} ,
{
"name" : "U+2236 RATIO" ,
"path" : "a∶ b" ,
"result" : "R6c: segment 1: code page 1250 maps the segment to one with U+003A"
} ,
{
"name" : "U+00A5, which cp932 maps to '\\'" ,
"path" : "a¥b" ,
"result" : "R6c: segment 1: code page 932 maps the segment to one with U+005C"
} ,
{
"name" : "U+20A9, which cp949 maps to '\\'" ,
"path" : "a₩b" ,
"result" : "R6c: segment 1: code page 949 maps the segment to one with U+005C"
} ,
{
"name" : "U+00B4, which cp1253 maps to '/'" ,
"path" : "a´ b" ,
"result" : "R6c: segment 1: code page 1253 maps the segment to one with U+002F"
} ,
{
"name" : "full-width solidus" ,
"path" : "a/ b" ,
"result" : "R6c: segment 1: code page 874 maps the segment to one with U+002F"
} ,
{
"name" : "full-width reverse solidus" ,
"path" : "a\ b" ,
"result" : "R6c: segment 1: code page 874 maps the segment to one with U+005C"
} ,
{
"name" : "full-width colon" ,
"path" : "a: b" ,
"result" : "R6c: segment 1: code page 874 maps the segment to one with U+003A"
} ,
{
"name" : "two full-width full stops" ,
"path" : ". . " ,
"result" : "R6c: segment 1: code page 874 maps the segment to one that breaks R3: the segment is two dots"
} ,
{
"name" : "8.3 alias" ,
"path" : "ABCDEF~1" ,
"result" : "R6b: segment 1: the segment has the form of an 8.3 alias"
} ,
{
"name" : "8.3 alias with an extension" ,
"path" : "ABCDEF~1.TXT" ,
"result" : "R6b: segment 1: the segment has the form of an 8.3 alias"
} ,
{
"name" : "~1 alone" ,
"path" : "~1" ,
"result" : "R6b: segment 1: the segment has the form of an 8.3 alias"
} ,
{
"name" : "8.3 alias with a non-ASCII letter" ,
"path" : "Ä~1.txt" ,
"result" : "R6b: segment 1: the segment has the form of an 8.3 alias"
} ,
{
"name" : "nine characters before ~1" ,
"path" : "ABCDEFGHI~1" ,
"result" : "ok"
} ,
{
"name" : "~1 inside a name" ,
"path" : "a~1b" ,
"result" : "ok"
} ,
{
"name" : "~2023 in a long name" ,
"path" : "report~2023.txt" ,
"result" : "ok"
} ,
{
"name" : "unassigned U+0378" ,
"path" : "ab" ,
"result" : "R4: segment 1: unassigned U+0378"
} ,
{
"name" : "noncharacter U+FFFE" ,
"path" : "ab" ,
"result" : "R4: segment 1: unassigned U+FFFE"
} ,
{
"name" : "U+206A" ,
"path" : "a b" ,
"result" : "R4: segment 1: invisible U+206A"
} ,
{
"name" : "U+206F" ,
"path" : "a b" ,
"result" : "R4: segment 1: invisible U+206F"
} ,
{
"name" : "soft hyphen U+00AD" ,
"path" : "a b" ,
"result" : "R4: segment 1: invisible U+00AD"
} ,
{
"name" : "U+034F COMBINING GRAPHEME JOINER" ,
"path" : "a͏ b" ,
"result" : "R4: segment 1: invisible U+034F"
} ,
{
"name" : "U+200B ZERO WIDTH SPACE" ,
"path" : "a b" ,
"result" : "R4: segment 1: invisible U+200B"
} ,
{
"name" : "U+2060 WORD JOINER" ,
"path" : "a b" ,
"result" : "R4: segment 1: invisible U+2060"
} ,
{
"name" : "U+3164 HANGUL FILLER" ,
"path" : "aㅤ b" ,
"result" : "R4: segment 1: invisible U+3164"
} ,
{
"name" : "U+FEFF" ,
"path" : "a b" ,
"result" : "R4: segment 1: invisible U+FEFF"
} ,
{
"name" : "U+202E RIGHT-TO-LEFT OVERRIDE" ,
"path" : "a b" ,
"result" : "R4: segment 1: invisible U+202E"
} ,
{
"name" : "tag U+E0041" ,
"path" : "a " ,
"result" : "R4: segment 1: invisible U+E0041"
} ,
{
"name" : "variation selector VS17" ,
"path" : "😀󠄀" ,
"result" : "R4: segment 1: invisible U+E0100"
} ,
{
"name" : "the flag of Scotland, with tags" ,
"path" : "🏴" ,
"result" : "R4: segment 1: invisible U+E0067"
} ,
{
"name" : "U+F03A of the private use area" ,
"path" : "informeanexo" ,
"result" : "R4: segment 1: private use U+F03A"
} ,
{
"name" : "TAB" ,
"path" : "a\tb" ,
"result" : "R4: segment 1: control U+0009"
} ,
{
"name" : "U+2028 LINE SEPARATOR" ,
"path" : "a\u2028b" ,
"result" : "R4: segment 1: separator U+2028"
} ,
{
"name" : "':'" ,
"path" : "a:b" ,
"result" : "R4: segment 1: character U+003A"
} ,
{
"name" : "'\\'" ,
"path" : "a\\b" ,
"result" : "R4: segment 1: character U+005C"
} ,
{
"name" : "'?'" ,
"path" : "a?b" ,
"result" : "R4: segment 1: character U+003F"
} ,
{
"name" : "'\"'" ,
"path" : "a\"b" ,
"result" : "R4: segment 1: character U+0022"
} ,
{
"name" : "'*', '\u003c', '\u003e' and '|'" ,
"path" : "a*b\u003cc\u003ed|e" ,
"result" : "R4: segment 1: character U+002A"
} ,
{
"name" : "a dot and ZWJ" ,
"path" : ". " ,
"result" : "R3: segment 1: the segment is a dot without ZWNJ, ZWJ, VS15 and VS16"
} ,
{
"name" : "a segment of ZWJ alone" ,
"path" : " " ,
"result" : "R3: segment 1: the segment is empty without ZWNJ, ZWJ, VS15 and VS16"
} ,
{
"name" : "two dots" ,
"path" : ".." ,
"result" : "R3: segment 1: the segment is two dots"
} ,
{
"name" : "one dot inside" ,
"path" : "a/./b" ,
"result" : "R3: segment 2: the segment is a dot"
} ,
{
"name" : "a segment of 256 bytes" ,
"path" : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ,
"result" : "R3: segment 1: 256 bytes, more than 255"
} ,
{
"name" : "a segment of 255 bytes" ,
"path" : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ,
"result" : "ok"
} ,
{
"name" : "127 times U+0390: 381 UTF-16 units after NFD" ,
"path" : "ΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐ" ,
"result" : "R3: segment 1: its NFD is 381 UTF-16 code units, more than 255"
} ,
{
"name" : "85 times U+0390: 255 UTF-16 units after NFD" ,
"path" : "ΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐΐ" ,
"result" : "ok"
} ,
{
"name" : "VS16 after U+2764, which admits it" ,
"path" : "❤️.txt" ,
"result" : "ok"
} ,
{
"name" : "VS16 after a" ,
"path" : "a️ " ,
"result" : "R4b: segment 1: U+FE0F is not part of an emoji variation sequence"
} ,
{
"name" : "ZWJ at the start" ,
"path" : " a" ,
"result" : "R4b: segment 1: U+200D at the start"
} ,
{
"name" : "ZWJ at the end" ,
"path" : "a " ,
"result" : "R4b: segment 1: U+200D at the end"
} ,
{
"name" : "two ZWJ in a row" ,
"path" : "a b" ,
"result" : "R4b: segment 1: U+200D right after U+200D"
} ,
{
"name" : "ZWNJ and ZWJ in a row" ,
"path" : "a b" ,
"result" : "R4b: segment 1: U+200D right after U+200C"
} ,
{
"name" : "ZWNJ inside a name" ,
"path" : "ab c" ,
"result" : "ok"
} ,
{
"name" : "the rainbow flag" ,
"path" : "🏳️🌈" ,
"result" : "ok"
} ,
{
"name" : "a family, joined with ZWJ" ,
"path" : "👨👩👧" ,
"result" : "ok"
} ,
{
"name" : "a leading slash" ,
"path" : "/a" ,
"result" : "R2: segment 1 is empty"
} ,
{
"name" : "two slashes" ,
"path" : "a//b" ,
"result" : "R2: segment 2 is empty"
} ,
{
"name" : "a trailing slash" ,
"path" : "a/" ,
"result" : "R2: segment 2 is empty"
} ,
{
"name" : "33 segments" ,
"path" : "a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a" ,
"result" : "R2: 33 segments, more than 32"
} ,
{
"name" : "a leading space" ,
"path" : " a" ,
"result" : "R5: segment 1: the segment starts with U+0020"
} ,
{
"name" : "a trailing space" ,
"path" : "a " ,
"result" : "R5: segment 1: the segment ends with U+0020"
} ,
{
"name" : "a trailing dot" ,
"path" : "a." ,
"result" : "R5: segment 1: the segment ends with '.'"
} ,
{
"name" : "CON.txt" ,
"path" : "CON.txt" ,
"result" : "R6: segment 1: CON is a reserved device name"
} ,
{
"name" : "con" ,
"path" : "con" ,
"result" : "R6: segment 1: CON is a reserved device name"
} ,
{
"name" : "Aux with a space before the dot" ,
"path" : "Aux .log" ,
"result" : "R6: segment 1: AUX is a reserved device name"
} ,
{
"name" : "COM with a superscript one" ,
"path" : "COM¹" ,
"result" : "R6: segment 1: COM¹ is a reserved device name"
} ,
{
"name" : "lpt9.doc" ,
"path" : "lpt9.doc" ,
"result" : "R6: segment 1: LPT9 is a reserved device name"
} ,
{
"name" : "CONIN$" ,
"path" : "CONIN$" ,
"result" : "R6: segment 1: CONIN$ is a reserved device name"
} ,
{
"name" : ".datekeys-x at the first level" ,
"path" : ".datekeys-x" ,
"result" : "R10: the first segment starts with \".datekeys-\""
} ,
{
"name" : ".DateKeys-X at the first level, compared by its key" ,
"path" : ".DateKeys-X/b" ,
"result" : "R10: the first segment starts with \".datekeys-\""
} ,
{
"name" : ".datekeys-x at another level" ,
"path" : "a/.datekeys-x" ,
"result" : "ok"
}
] ,
"trees" : [
{
"name" : "three files in two folders" ,
"paths" : [
"a/b" ,
"a/c" ,
"d"
] ,
"result" : "ok"
} ,
{
"name" : "U+FF5E before U+1F600: UTF-8 byte order" ,
"paths" : [
"~ " ,
"😀"
] ,
"result" : "ok"
} ,
{
"name" : "U+1F600 before U+FF5E: UTF-16 order, not UTF-8 byte order" ,
"paths" : [
"😀" ,
"~ "
] ,
"result" : "ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "b and a, in that order" ,
"paths" : [
"b" ,
"a"
] ,
"result" : "ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "b/.. and a: R8 comes first, in layer 3" ,
"paths" : [
"b/.." ,
"a"
] ,
"result" : "ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "the same path twice" ,
"paths" : [
"a" ,
"a"
] ,
"result" : "ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "a path of 1025 bytes" ,
"paths" : [
"a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a"
] ,
"result" : "ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : ".. and a: R3, in layer 4" ,
"paths" : [
".." ,
"a"
] ,
"result" : "ERR_HEAD_INVALID" ,
"detail" : "file 1: R3: segment 1: the segment is two dots"
} ,
{
"name" : "A.txt and a.txt" ,
"paths" : [
"A.txt" ,
"a.txt"
] ,
"result" : "ERR_HEAD_INVALID" ,
"detail" : "R7: path 2 collides with path 1 in segment 1"
} ,
{
"name" : "A and a/b" ,
"paths" : [
"A" ,
"a/b"
] ,
"result" : "ERR_HEAD_INVALID" ,
"detail" : "R7: path 2 collides with path 1 in segment 1"
} ,
{
"name" : "a/b and a/b/c" ,
"paths" : [
"a/b" ,
"a/b/c"
] ,
"result" : "ERR_HEAD_INVALID" ,
"detail" : "R7: path 2 makes a file of path 1 a folder, or the reverse, in segment 2"
} ,
{
"name" : "Fotos/b and fotos/a" ,
"paths" : [
"Fotos/b" ,
"fotos/a"
] ,
"result" : "ERR_HEAD_INVALID" ,
"detail" : "R7: path 2 collides with path 1 in segment 1"
} ,
{
"name" : "STRASSE and Straße" ,
"paths" : [
"STRASSE" ,
"Straße"
] ,
"result" : "ERR_HEAD_INVALID" ,
"detail" : "R7: path 2 collides with path 1 in segment 1"
} ,
{
"name" : "k and the Kelvin sign" ,
"paths" : [
"k" ,
"K "
] ,
"result" : "ERR_HEAD_INVALID" ,
"detail" : "R7: path 2 collides with path 1 in segment 1"
} ,
{
"name" : "ab with and without ZWNJ" ,
"paths" : [
"ab" ,
"a b"
] ,
"result" : "ERR_HEAD_INVALID" ,
"detail" : "R7: path 2 collides with path 1 in segment 1"
} ,
{
"name" : "the NFD and the NFC of a name" ,
"paths" : [
"é" ,
"é"
] ,
"result" : "ERR_HEAD_INVALID" ,
"detail" : "R7: path 2 collides with path 1 in segment 1"
}
]
}