# absolute paths - cabextract removes leading slashes and replaces "../" with "xx/"
/absolute/path
/absolute/../../and/relative/path
\absolute\path\reverse\slashes
\absolute\..\..\and\relative\path\reverse\slashes

# nothing but slashes - cabextract turns this to just "x"
/
\
///////////
\\\\\\\\\\\

# relative paths - cabextract replaces "../" with "xx/"
../relative/path
../../relative/path
../../../relative/path
relative/../path
relative/../../path
relative/../../../path

# absolute and relative paths with overlong encodings of "/"
# 0x2F = correct encoding
# 0xC0 0xAF = overlong (cabextract converts this to 2 replacement chars)
# 0xE0 0x80 0xAF = overlong (cabextract accepts this encoding so blocks the "../")
# 0xF0 0x80 0x80 0xAF = overlong (cabextract accepts this encoding so blocks the "../")
# 0xF8 0x80 0x80 0x80 0xAF = overlong (cabextract converts this to 5 replacement chars)
# 0xFC 0x80 0x80 0x80 0x80 0xAF = overlong (cabextract converts this to 6 replacement chars)
À¯absoluteÀ¯path2b
à€¯absoluteà€¯path3b
ð€€¯absoluteð€€¯path4b
ø€€€¯absoluteø€€€¯path5b
ü€€€€¯absoluteü€€€€¯path6b
relativeÀ¯..À¯..À¯path2b
relativeà€¯..à€¯..à€¯path3b
relativeð€€¯..ð€€¯..ð€€¯path4b
relativeø€€€¯..ø€€€¯..ø€€€¯path5b
relativeü€€€€¯..ü€€€€¯..ü€€€€¯path6b

# relative paths hiding after overlong encodings of null byte
# cabextract sees the 2,5,6 byte versions as 2,5,6 invalid bytes
# and converts to 2,5,6 replacement chars. cabextract sees the
# 3,4 byte versions as valid bytes, but rejects the resulting
# null so replaces with a single replacement char
innocuousÀ€/../../relative/path2b
innocuousà€€/../../relative/path3b
innocuousð€€€/../../relative/path4b
innocuousø€€€€/../../relative/path5b
innocuousü€€€€€/../../relative/path6b
