michaellukashov / Far-NetBox

SFTP/SCP/FTP/FTPS/WebDAV/S3 client for Far Manager 3 (http://farmanager.com/)
https://forum.farmanager.com/viewtopic.php?t=6317
GNU General Public License v2.0
155 stars 52 forks source link

SCP: cлучайная запись бинарных данных в консоль может привести к зависанию #438

Closed ssvine closed 3 months ago

ssvine commented 3 months ago

Если в режиме SCP пользователь случайно вывел бинарные данные на экран, то соединение может зависнуть.

Пример команды:

$ echo -ne "abc\0"

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

Пулл реквест рассматривает нулевой символ в качестве сепаратора end-of-line.