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


Присутствуют сообщения из эхоконференции RU.GOLDED с датами от 16 Jul 13 03:28:02 до 27 Jun 24 12:59:36, всего сообщений: 3580
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 2744 из 3580 ======================================== RU.GOLDED =
От   : Vitaliy Aksyonov                 1:104/117          03 Oct 23 07:14:18
Кому : Semen Panevin                                       03 Oct 23 07:14:18
Тема : Re: Еще один крэш
FGHI : area://RU.GOLDED?msgid=1:104/117+651c13ae
На   : area://RU.GOLDED?msgid=2:5025/121+651bd3a7
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://RU.GOLDED?msgid=1:104/117+651cd052
==============================================================================
Привет, Semen!

03 Oct 23 11:31, ты писал(а) мне:

VA>>> hunspell пытается проверять орфографию, думая, что ему подсунули
VA>>> текст в UTF-8, а там KOI8-R. И ему срывает крышу.
SP>> Интересно...
SP>> Но там же iconv не для перекодировки в коде проверки орфографии
SP>> ли используется как раз? У меня вроде включен.

SP> Попробовал не сохранять сообщение, а отменить.

SP> corrupted size vs. prev_size
SP>                                                /home/fido/bin/golded:
SP> строка 4: 12147 Аварийный останов       gedlnx $*

SP> Тоже крашится.

Там есть заезд по памяти в одном месте точно. В файле goldlib\gall\gespell.cpp в функции
void CSpellLang::RecodeText(const char *srcText, std::string &dstText, bool flag)
найди строку
char *dstbuffer = new char[srcLen+1];
и сделай буффер побольше, например вот так
char *dstbuffer = new char[srcLen * 4 + 1];

При преобразовании однобайтной кодировки в UTF-8 весело портим память. Размер буфера не проверяется.

Еще у меня коряво преобразовывает из KOI8-R в UTF-8. С этим я еще покопаюсь.

А вообще, попробуй ради эксперимента преобразовать свои словари в KOI8-R и попробуй с "родным" hunspell и с твоим патчем. 99%, что взлетит. У меня точно работает.

Для этого достаточно перекодировать .dic и .aff файлы и в .aff файле поменять _SET UTF-8_ на _SET KOI8-R_

Очень интересно, взлетит ли у тебя.

SP> Попялился в код на тему кодировок словаря и iconv.
SP> Кодировка словаря там точно загружается, и скармливается
SP> перекодировщику. А тот в свою очередь вроде как юзает

SP> int LoadCharset(const char* imp, const char* exp, int query)
SP> ...
SP> #ifdef HAS_ICONV
SP>     if( iconv_cd != (iconv_t)(-1) )
SP>         iconv_close(iconv_cd);
SP>     iconv_cd = iconv_open(exp, imp);
SP>     if(iconv_cd != (iconv_t)(-1) )
SP>         LOG.printf("iconv is initialised to convert from %s to %s",
SP> imp, exp);
SP>     else
SP>         LOG.printf("Can't initialise iconv to convert from %s to %s",
SP> imp, exp); #endif
SP> ...

Пробовал с iconv. Во-первых я удивился, что они его используют посимвольно, вместо того, чтобы всю строку сразу преобразовать. Во-вторых, там есть косяки с инициализацией. И конкретно в спеллчекере у меня получилось, что вместо того, чтобы преобразовывать из KOI8-R в UTF-8, оно преобразовывает из CP866 в KOI8-R. Естественно, получается каша. :)

SP> Хотел почитать лог, и обнаружил что лог файл у меня создаётся, но он
SP> всегда пустой. Вообще никаких логов. ЧЯДНТ? В конфиге ничего про лог
SP> левелы не нашёл. Лог формат стоит вроде Fd. Попробовать другой?

SP> Что интересно - дальше в коде LoadCharset вроде как нету использования
SP> iconv, проходится по таблицам перекодировки из конфига, и если не
SP> находит там нужную (а utf8 у меня действительно нету, я как-то на
SP> iconv полагался...) то говорит "не шмогла", current_table = -1 и
SP> return 0

SP> Что происходит дальше - пока некогда разбираться...
SP> Понять бы, почему логи не пишутся...

Логи у меня пишутся. Логлевелов вроде там нет никаких. Хотя я могу быть неправ. Еще на настолкьо глубоко вникал.

Хуже всего то, что некоторый код весело пишет в stdout/stderr и портит картинку.

ЗЫ. Вот и нашел себе следущую задачу. :) Переделать XlatStr, чтобы не было заездов по памяти. Как минимум - передавать размер выходного буфера.

Best regards,
Vitaliy Aksyonov.

... Точность - вежливость снайперов.
--- GoldED+/LNX 1.1.5-b20230920
* Origin: Aurora, Colorado (1:104/117)

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