home tags events about login

sergeyb rss

Sergey Bronnikov / Сергей Бронников

Делай добро и бросай его в воду.

sergeyb bonked 21 Feb 2025 06:48 +0300
original: stsp@bsd.network

A new version of #gameoftrees has been released (0.110) to quickly address a regression found in the previous release (0.109).

🌀​ If got-read-pack is spinning on a CPU then upgrading to 0.110 should fix this problem.

🕸️​ We also changed the diff algorithm used by gotwebd. It now displays Patience diffs which sometimes look prettier than Myers diffs.

Meanwhile, on a branch there is on-going work on gotsysd. This new daemon will allow a gotd server to be configured by committing a configuration file to a special repository. A bit like gitolite works, but with parse.y config syntax and of course different internals. This will eventually be used for opencollective.com/gothub

By now it is about.. half way done?

got diff -d main gotsysd

53 files changed, 14178 insertions(+), 3 deletions(-)

sergeyb honked 20 Feb 2025 13:31 +0300

Проект holidata.net распространяет данные о национальных праздниках под лицензией Creative Commons:

[0] ~ $ curl -s https://holidata.net//ru-RU/2025.json | jq '.date + " " + .description'
"2025-01-01 Новый Год"
"2025-01-07 Рождество Христово"
"2025-02-23 День защитника Отечества"
"2025-03-08 Международный женский день"
"2025-04-20 Пасха"
"2025-05-01 Праздник весны и труда"
"2025-05-09 День Победы"
"2025-06-12 День России"
"2025-11-04 День народного единства"

sergeyb honked 19 Feb 2025 10:21 +0300

Фаззинг-тесты, которые мы изначально делали для нашего форка LuaJIT,
используются для непрерывного фаззинга оригинального проекта LuaJIT и
интерпретатора PUC Rio Lua. Результат двухлетней работы: 6 багов в PUC Rio Lua, превентивно найденные до релиза, и 23 бага в LuaJIT. Всё были исправлены. Использование одних и тех же тестов для разных проектов оказалось возможным благодаря тому, что PUC Rio Lua и LuaJIT предоставляют один и тот же Lua C API.

Если в этих проектах получилось успешно использовать фаззинг, то было бы здорово применить их и для другого Lua рантайма, подумал я.

Для Go есть популярный среди гоферов проект - GopherLua, это реализация Lua на Go. Для проекта написано много расширений, которые добавляют функциональность со стороны Lua. В Go есть встроенный тулинг для написания фаззинг-тестов: нужно всего лишь написать обёртку для функции, собрать специальной командой и вообщем-то всё. Но я не знаю про аналог libprotobuf-mutator в Go (гоферы, подскажете?). Поэтому сделать фаззеры для GopherLua с неструктурированными данными проще простого, а чтобы фаззинг-тест генерировал структурированные валидные данные я не смог найти решения.

Я решил попробовать изобразить из GopherLua библиотеку с Lua C API, чтобы эту библиотеку можно было скомпоновать с моими тестами и переиспользовать фаззинг для Lua применительно к GopherLua. Для интеграции Go с C есть cgo, который предоставляет возможность использования C-библиотек в Go и экспорта Go функций в интерфейс C (генерация заголовочного файла). Если кратко, то LuaJIT C FFI мне показался удобнее, чем использование cgo. Из того, с чем я столкнулся:

  • В cgo нельзя указать макросы, чтобы потом эти макросы оказались в сгенерированом заголовочном файле. Поэтому часть макросов из lua.h пришлось принести в сам тест.
  • в Go нельзя никак указать, что функция не принимает аргументов, чтобы в заголовочном файле у функции в параметрах был void. На эту тему есть тикет и вроде даже патч.
  • В Lua C API каждая функция первым аргументом принимает указатель на L, структуру, описывающую Lua стек. Я не придумал, как возвращать из Go/cgo эту структуру, поэтому мой модуль может работать с единственной копией стека. Но для моих целей этого достаточно.

В результате этой работы можно собрать тест, который по грамматике генерирует программы на Lua и исполняет их в GopherLua. Правда не все программы исполняются одинаково успешно и иногда случаются проблемы работы с памятью (runtime error: invalid memory address or nil pointer dereference).

#lua #fuzzing

sergeyb honked 17 Feb 2025 17:04 +0300

Долго оттягивал переезд с Ubuntu 22.04 на 24.04. Несмотря на то, что использую только LTS, багов всё равно хватает. На выходных обновился, обновление прошло без проблем, только устройство вывода звука почему-то неправильно определилось по умолчанию. Ещё в 24.04 система как будто стала меньше ресурсов потреблять.

#ubuntu #linux