kswaldemar / rewind-viewer

Fast match viewer with rewinding support for Russian AI Cup championship series
MIT License
75 stars 23 forks source link

How to use line break in Message() function? (Answer "\\n") #28

Closed Savidiy closed 6 years ago

Savidiy commented 6 years ago

Привет. Если я использую для перевода строки "\n", то сообщение не выводится. Какой перевод строки надо использовать в функции Message()?

Hi. If I used "\n" line break, message didn't out. What line break used in Message() function?

default

Karloid commented 6 years ago

Попробуй отправлять \\n

Savidiy commented 6 years ago

Спасибо. Как я понял там самостоятельно выделяются из текста спецсимволы. Поэтому я использую Message("Hello \\n world"); и получаю перевод строки по середине, как и хотел. \\t делает табуляцию.

p.s. Здесь редактор тоже обрезает две \\ в \ =)

Karloid commented 6 years ago

все дело в том что сообщения отправляются в формате lson и например с++ и джава клиенты не экранируют строку отправляемую через message, и при появлении там всяких \n или " все ломается. Соответственно через message можно делать инъекции джсона : D

kswaldemar commented 6 years ago

В C++ клиенте это фича, строка парсится snprintf перед отправкой, чтобы можно было писать запросы вида message("My pos %lf, %lf\\n", my_x, my_y). Поэтому нужно двойное экранирование

kswaldemar commented 6 years ago

Думаю можно закрыть issue, вопрос разрешен, а те кто столкнуться в дальнейшем смогут найти ответ поиском.