Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.GOLDED
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.GOLDED с датами от 16 Jul 13 03:28:02 до 27 Jun 24 12:59:36, всего сообщений: 3580
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 2906 из 3580 ======================================== RU.GOLDED =
От   : Vitaliy Aksyonov                 1:104/117          23 Oct 23 17:59:54
Кому : Nil A                                               23 Oct 23 17:59:54
Тема : Re: Широкие терминалы и char buf[сколько не жалко].. StyleCodeHighlight
FGHI : area://RU.GOLDED?msgid=1:104/117+65370da3
На   : area://RU.GOLDED?msgid=2:5015/46+65341203
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://RU.GOLDED?msgid=2:5015/46+65371724
==============================================================================
Привет, Nil!

21 Oct 23 20:49, ты писал(а) мне:

NA>> Всё-таки хер ты так просто починишь эти широкие терминалы в
NA>> эхотаге. 80x25 форева!

NA>> Например, ты заменил все эти
NA>> -    char buf[256], tmp[256];
NA>> +    char buf[MAXCOL], tmp[MAXCOL];

NA>> А фиг там, там разных char buf[200] разбросано по коду
NA>> (Container::StyleCodeHighlight). И наступить на них можно, если
NA>> там в письмах какие-то особо длнные _такие вот_, *или вот такое*
NA>> какие-то выделения, только за пределами этимх 256 байтов обычно.

Понимаешь, самая большая проблема, что их нельзя просто Find/Replace/sed. Во многих местах буферы адекватного размера, так как есть натуральные ограничения данных. Например, имя сисопа в пакете. Плюс эти структуры копируются простым memcpy, а некоторые даже используются! для "сериализации". Так что там переделок намного больше, чем хотелось бы.

NA>> Или вот, подсвечиваем УРЛы как-то по-разному, и там этот буфер на
NA>> 200.

NA> Короче, вот фикс, чтобы на широком экране, на длинной строчке, где
NA> есть *какие-то выделения* голдед не падал.

Создал pull request от твоего имени. :)

Там дело хуже. Когда URL длиннее строки, то подсвечивается только первая строка. И это не айс. И я не вижу нормального способа это починить. Ведь с новой строки может быть как продолжение ссылки, так и просто текст.

Далее. Список схем, которые понимает эхотаг, там жестко зашит. А по-хорошему, его надо просто парсить и искать URI.
В педивикии описано довольно неплохо:
https://en.wikipedia.org/wiki/Uniform_Resource_Identifier

А список возможных схем вообще впечатляет:
https://en.wikipedia.org/wiki/List_of_URI_schemes

А теперь добавляем туда юникодные символы, и получаем еще более интересную картину.
Какой-нибудь https://пиво.рф или git@исходники.ру:мой/репозиторий.git

Кто там хотел юникод? :)

[...skipped...]

NA> И с этим фиксом я могу зайти на сообщение, на котором раньше валилось.
NA> А потом я нажал сохранить в файл, и..... угадай что?

NA> golded3/getpls.cpp: TemplateToText()
NA>     char quotestr[100];
NA>     char qbuf[100];

Там ещё другое есть. Это overlap при копировании строк. Когда oldMsg и msg - это тот же объект. :) Вообще весело.

NA> Вот теперь в них падает. Их что теперь, все в CREATEBUFFER(char, buf,
NA> MAXCOL) ?

Нет. Нельзя бездумно все. Лучше потихоньку переводить на std::string (в котором, кстати, тот же UTF-8 прекрасно хранится, если не надо делать посимвольных операций, конечно), меняя алгоритмы.

NA> P.S. Я думал, сколько нужно мест вычистить в голдеде
>> $ grep -rI strcpy | wc -l
>> 957
NA> Ну и заодно
>> $ grep -rI sprintf | wc -l
>> 587
NA> Но, на самом деле всё зло там вот в таких вот магических цифрах 100,
NA> 128, 200, 256,... размера буфера на стеке, которого должно хватить.
>> $ grep -rI '\[100\]\|\[128\]\|\[200\]\|\[256\]' | wc -l
>> 222

Все зло не в этом, а в том, что копируют без проверки размера. Пусть strcpy и опасная функция, но даже её можно использовать разумно. Даже на ассемблере пишут код и ничего, работает и не взрывается.

Best regards,
Vitaliy Aksyonov.

... Я сегодня бодр и весел: утром рэпера повесил.
--- GoldED+/LNX 1.1.5-b20231021
* Origin: Aurora, Colorado (1:104/117)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.039174 секунды