Релиз Svace 3.4

Выпущена бета-версия следующего релиза Svace, который будет иметь версию 3.4.

Основные изменения:

Система выпусков релизов Svace

Каждый год в четвёртом квартале мы выпускаем новый релиз. Процесс выпуска сопровождается детальным сравнением результатов Svace на обширной кодовой базе и исправлением регрессий.

Сейчас мы выпускаем бета-версию ежегодного релиза. В этой версии уже присутствуют все новые улучшения, но анализ качества инструмента проведен пока не на всех тестовых проектах, исправлены только критические регрессии. Остальные найденные недостатки мы будем исправлять до выпуска релиза. Уже сейчас в бета-версии 3.4 исправлено большое количество проблем, которые остаются в версии 3.3.

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

Для удобства обновления имеют следующий формат: 3.4.YYMMDD, где YYMMDD означает дату выхода обновления. Например, 3.4.231201 означает, что это обновление выпущено 1 декабря 2023 года.

После выхода основной версии Svace 3.4 мы планируем прекратить поддержку Svace 3.3. До этого момента мы будем продолжать выпускать обновления для 3.3.

UAST-анализатор

В Svace появился новый компонент UAST для анализа множества языков на основе обобщённого абстрактного синтаксического дерева (АСД).

О нём уже написано здесь.

Благодаря этому компоненту теперь упрощается разработка легковесных детекторов на основе АСД для языков Java, Kotlin, Python.

В предыдущей версии детекторы размещались в компиляторе для соответствующего языка и не имели общей кодовой базы. В новой версии часть компилятора ответственна только за сохранение представления АСД, а анализ происходит одинаково на основе этого представления.

Анализ Python

Мы расширили список поддерживаемых языков поддержкой Python.

Подробнее можно посмотреть здесь.

Svace API

Подробнее написано здесь.

Мы добавляем для пользователей возможность писать свои собственные детекторы. По мере интереса и обратной связи мы будем расширять возможности написания таких детекторов.

Улучшения для Go

Подробнее написано здесь.

Теперь мы поддерживаем анализ проектов на основе Go 1.20. Кроме этого, теперь можно анализировать Go проекты, которые используют систему bazel. До этого Svace умел анализировать проекты с bazel для всех языков, кроме Go. Причиной было то, что мы перехватывали сборку на более высоком уровне, чем используется системой bazel.

Также мы начали анализировать тип map в Go и исправили ошибки, связанные с анализом срезов (slices).

Улучшения для Kotlin

Мы поддержали версию Kotlin 1.8.

Другие изменения

В данном релизе мы существенно улучшили девиртуализацию в Svace, т.е. способность разрешать косвенные вызовы. В том числе для лямбд языков Java, Kotlin и замыканий Go.

Немного была улучшена контекстная чувствительность. Теперь Svace сохраняет больше условий межпроцедурно.

А также исправлено множество ошибок и улучшено значительное количество детекторов: TAINTED_INT, TAINTED_ARRAY_INDEX, TAINTED_PTR, INT_OVERFLOW, PASSED_TO_PROC_AFTER_RELEASE, DEREF_OF_NULL.RET, NULL_AFTER_DEREF, DEREF_OF_NULL.DYN_CAST, REDUNDANT_COMPARISON, UNREACHABLE_CODE, BUFFER_OVERFLOW.SPRINT, STATIC_OVERFLOW, UNSPECIFIED_CHAR_IN_COND, PROC_USE.VULNERABLE и другие.


Алексей Бородин