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


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

Tuesday October 17 2023 05:14, from Nil A -> All:

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 байтов обычно.

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

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

diff --git a/golded3/gectnr.cpp b/golded3/gectnr.cpp
--- a/golded3/gectnr.cpp
+++ b/golded3/gectnr.cpp
@@ -95,7 +95,7 @@ void Container::StyleCodeHighlight(const char* text, int row, int col, bool dohi

     uint sclen = 0;
     const char* txptr = text;
-    char buf[200];
+    CREATEBUFFER(char, buf, MAXCOL);
     const char* ptr = text;
     const char* stylemargins = " -|\\";    // we probably have to make a keyword for it
     char* punctchars = CFG->stylecodepunct;

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

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

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

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

Best Regards, Nil
--- GoldED+/LNX 1.1.5
* Origin: Linux 2.6.32-042stab145.3 (2:5015/46)

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