# 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)
absolutepath2b
absolutepath3b
absolutepath4b
absolutepath5b
absolutepath6b
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
