Трапилася непроста ситуація. Є код, написаний на С, який активно використовується через cgo в проекті, написаному на Go. У якийсь момент програма почала падати з помилками від malloc: то segfault, то memory corruption.

Логічна думка: потрібен valgrind з його memcheck, щоб перевірити, хто лізе поперек батька в пекло невалидную пам'ять. Однак, спроба згодувати валгринду бінарники, отриманий від go build, призведе тільки до розчарування — навіть на простому Hello World валгринд вибухне сотнями помилок і відправить розробника на відомі координати (спойлер: "Go fix your program!").

Це відбувається з-за того, що go runtime досить специфічний і значно відрізняється від такого в С. (Подробиці можна спокійно знайти за запитом «golang valgrind»).

Так як же нам розібратися, що відбувається?

Читати далі →

Rock Sanitize - простий і гнучкий санитизатор

Поговоримо про Rock SanitizeВсім привіт!

Продовжую розповідати про інструменти, які дозволяють убезпечити вашу веб-додаток. Сьогодні це бібліотека для санитизации даних.

Санитизация видаляє (або екранує) неправильні або небезпечні символи з користувальницького введення, або правильним чином формує вихідні дані.

Читати далі →