Русский
Русский
English
Статистика
Реклама

Infer межпроцедурный анализ безопасности доступа к памяти для C

Мы рады объявить о публичном выпуске Infer#, который предоставляет сообществу .NET возможности межпроцедурного статического анализа Infer. Кроме того, в рамках нашей приверженности открытому исходному коду проект был выпущен на GitHub под лицензией MIT.

Статический анализ это метод, обычно используемый в рабочем процессе разработчика для проверки правильности исходного кода без необходимости его выполнения. Популярные анализаторы в экосистеме .NET это FxCop и Roslyn. Infer# дополняет эти инструменты, обнаруживая межпроцедурные ошибки безопасности памяти, такие как разыменование null и утечки ресурсов.

Интегрируясь непосредственно в рабочий процесс разработчика для обнаружения ошибок надежности и безопасности перед их отправкой, Infer# поддерживает гибкую разработку для .NET. В самом деле, мы уже наблюдаем многообещающие первые результаты в отношении программного обеспечения Microsoft, такого как Roslyn, .NET SDK и ASP.NET Core.

Мы планируем и дальше расширять Infer#, и в будущем мы будем поддерживать безопасность потоков.

Подробнее под катом.



Межпроцедурный анализ валидации памяти для C#


Infer# в настоящее время обнаруживает нулевые разыменования (null dereferences) и утечки ресурсов. Мы проиллюстрируем каждую возможность ниже с ошибочным фрагментом кода вместе с соответствующим предупреждением, которое Infer# выводит об этом.

Чтобы узнать больше о технической реализации Infer#, посетите нашу вики.

Null Dereference


    static void Main(string[]) args)    {        var returnNull = ReturnNull();        _ = returnNull.Value;    }    private static NullObj ReturnNull()    {        return null;    }internal class NullObj{    internal string Value { get; set; }}

Переменной returnNull межпроцедурно присваивается значение null, а ссылка на нее разыменовывается посредством чтения поля Value. Это разыменование обнаружено:

/home/runner/work/infersharpaction/infersharpaction/Examples/NullDereference/Program.cs:11: error: NULL_DEREFERENCE (biabduction/Rearrange.ml:1622:55-62:)  pointer 'returnNull' could be null and is dereferenced at line 11, column 13.

Утечка ресурсов


public StreamWriter AllocatedStreamWriter(){    FileStream fs = File.Create("everwhat.txt");    return new StreamWriter(fs);}public void ResourceLeakBad(){    StreamWriter stream = AllocateStreamWriter();    // FIXME: следует закрыть StreamWriter, вызвав stream.Close(), если stream не равен нулю.}

Переменная Stream StreamWriter возвращается из AllocateStreamWriter, но не закрывается. Infer# сообщает об утечке ресурсов, что позволяет разработчику исправить ошибку:

/home/runner/work/infersharpaction/infersharpaction/Examples/ResourceLeak/Program.cs:11: error: RESOURCE_LEAK  Leaked { %0 -> 1 } resource(s) at type(s) System.IO.StreamWriter.

Далее: нарушения безопасности потоков


Учитывая положительные отзывы, которые мы уже получили о способности Infer# обнаруживать нулевые разыменования и утечки ресурсов, мы работаем над дополнительными сценариями обнаружения дефектов. Нарушение безопасности потоков это следующий сценарий на горизонте:

public class RaceCondition{    private readonly object __lockobj = new object();    public int intField;    public void WriteToField(int input)    {        lock (__lockObj)        {            intField = input;        }    }    public int ReadFromField()    {        return intField;    }}

Хотя функция все еще находится в разработке, предупреждения будут появляться аналогично тому, как они появляются в Java; Блоки операторов lock() запускают анализ RacerD так же, как блоки Java synchronized().

/.../Examples/RaceCondition/Program.cs:39: error: THREAD_SAFTY_VIOLATION  Read/Write race. Non-private method 'Int32 RaceCondition.ReadFromField()' reads without synchronization from 'this.intField'. Potentially raceswith write in method 'RaceCondition.WriteToField(...)'.  Reporting because another access to the same memory occurs on a background thread, although this access may not.

Пробуйте Infer#!

Источник: habr.com
К списку статей
Опубликовано: 16.12.2020 10:16:09
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании microsoft

Программирование

Анализ и проектирование систем

Net

C

Microsoft

Infer

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru