Subj : Problem with filenames containing spaces
To : Paul Hayton
From : Stas Mishchenkov
Date : Thu Jan 13 2022 10:15 am
Hi, Paul!
13 ﭢ 22 11:53, Paul Hayton -> All:
PH> This is not a properly escaped filename being sent by BinkD as it does
PH> not follow the BINKP protocol specifications for filename escaping:
http://ftsc.org/docs/fts-1026.001
Publication: FTS-1026
Revision: 1
Title: Binkp/1.0 Protocol specification
Authors: Michiel Broek
Stas Degteff
Issue Date: 1 December 2005
Review Date: 1 December 2007
[...skipped...]
5.2 Escaping method for illegal characters in Command Argument
--------------------------------------------------------------
In some cases there is a need to send illegal characters in
the command argument (usually the file name). These characters
SHOULD be escaped using form of 4th symbols sequence: "\", "x"
and two hexadecimal digits (digits "a".."f" may be any case).
Examples:
whitespace (" ") excaped as "\x20"; pipe ("|") escaped as "\x7c".
If escaping may be used in some command argument, mailer MUST
allways escape character '\' for prevent uncertainty.
In FSP-1011.003 the escape method is specified as two hexadecimal
digits preceded with a backslash (e.g. a whitespace is
transmitted as "\20"). Some mailers have implemented that method.
It is advised to have a setting for specific nodes to sent escaped
characters using the incorrect method.
Any mailer SHOULD decode "\20" into space in file names for
compatibility purposes.
5.3 Non-ASCII Characters in Command Argument Symbol String
----------------------------------------------------------
Generally, mailer SHOULD use only characters from the ASCII range
[32...126] in the symbol strings for command arguments.
Other characters MAY be used only in M_NUL command argument in
plain form.
Implementation recommendation: use isprint() function (ISO C).
5.4 File Name Issues
--------------------
In binkp commands that contain a file name, the file name MUST NOT
include a whitespace (ASCII value 20 hex). If name of file to send
contents space, it MUST be escaped. The file name SHOULD NOT
include symbols other than alphanumeric (A-Z,a-z,0-9) and safe
characters as defined below in BNF. All other symbols are to be
considered unsafe and SHOULD be escaped. Space and backslash (\)
MUST be escaped.
For example: file name "abcd e.0f@" must be transmitted in form
"abcd\x20e.0f@".
filename= *pchar
pchar = plain | escaped
plain = alpha | digit | safe
safe = "!" | """ | "#" | "$" | "%" | "&" | "'" | "(" | ")" |
"*" | "+" | "," | "-" | "." | "/" | ":" | ";" | "<" |
"=" | ">" | "?" | "@" | "[" | "]" | "^" | "_" | "`" |
"{" | "|" | "}" | "~"
alpha = "A" | "B" | ... | "Z" | "a" | "b" | ... | "z"
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
escaped = "\x" HEX HEX
HEX = digit | "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" |
"c" | "d" | "e" | "f"
Note: some characters are illegal for file names in some OS such as
DOS or Windows. The protocol do not impose limitations for these
characters in file names and if mailer receives OS incompatible
file name then it's reaction determine on a implementation: mailer
may be destructive skip file, save file with some legal name or
other.
The protocol does not impose limitations on the file name length
other than those arising from the finite length of the binkp frame
itself. Really file name length can't exceed 32751 bytes.
Have nice nights.
Stas Mishchenkov.
--- ������ - �� ����� ������ ��쪨 � �ᯮ�������, �� ���� ������ �㯨��
* Origin: Lame Users Breeding. Simferopol, Crimea. (2:460/5858)