Если в режиме SCP пользователь случайно вывел бинарные данные на экран, то соединение может зависнуть.
Пример команды:
$ echo -ne "abc\0"
При выполнении этой команды, функция TSecureShell::ReceiveLine() прочитает строку (типа RawByteString) с содержимым "abc\0NetBox: this is end-of-file:0\n". После преобразования её в UnicodeString, она превратится в "abc" из-за нулевого байта. Это приведёт к тому, что функция ReadCommandOutput не сможет распознать конец передачи и пойдёт читать вывод снова, но уже с зависанием, т.к. читать больше нечего.
Пулл реквест рассматривает нулевой символ в качестве сепаратора end-of-line.
Если в режиме
SCP
пользователь случайно вывел бинарные данные на экран, то соединение может зависнуть.Пример команды:
При выполнении этой команды, функция
TSecureShell::ReceiveLine()
прочитает строку (типаRawByteString
) с содержимым"abc\0NetBox: this is end-of-file:0\n"
. После преобразования её вUnicodeString
, она превратится в"abc"
из-за нулевого байта. Это приведёт к тому, что функцияReadCommandOutput
не сможет распознать конец передачи и пойдёт читать вывод снова, но уже с зависанием, т.к. читать больше нечего.Пулл реквест рассматривает нулевой символ в качестве сепаратора
end-of-line
.