Tuesday November 15 2016 22:51, from Nil Alexandrov -> Eugene Palenock:
NA> А, так просто htick в кору падает при разборе нетмейла на файлфикс. NA> Husky у меня 1.9-cur из CVS. Надо будет поразбираться..
Блин, взял вроде самый популярный и проверенный комплект для фидо binkd+hpt+golded, валяться в кору все три компонента. :-(
Подебагерил binkd, популярные перлы запостил в ru.binkd.
Голдед спотыкается на нодлисте, вроде был фикс, но никто не засабмитил в репозитарий. Также падает он на кривых Jam базах (можно степерь файл) и кривых мессагах (можно пометить как прочитанное и проедет мимо), тоже лень разбираться.
Сегодня поговорим про кривизну Хаски, все эти strcpy() без проверки на границы и равномерно разбросанные маллоками с константными значениями "авось хватит".
А дело было так, автоскриэйтилась у меня фэха 5020-723.files с названием "‹®Є ..." ну там на две строчки такой кодировки. У ориджина стоит hpt-1.4 из файдо-айпи, и, видимо, не валиться, а у меня hpt-1.9-cur и вот трабл (к вопросу, что 1.4 версия совсем плохая). Проблема общая для AreaFix и FileFix, если дескрипшен длинее 78 символов.
areafix/src/areafix.c, функция formatAreaList(), приходит ей maxlen=78, печатает она флажки '*RWMS', название фэхи, дальше доходит дело до дескрипшена, который wlen = strlen(al->areas[i].desc); В maxlen такой дексрипшен не лезет, надо мультилайн делать, ставим перевод строки и допечатываем дескрипшен на след.строке addline(addchars(text,' ',maxlen-wlen,&tpos,&tlen),al->areas[i].desc,&tpos,&tlen) никто не заметил, что maxlen-wlen как бы получается отрицательное число, ну мы так аккуратно на чужую память залезаем.