Как стать автором
Обновить
3
0.1

Пользователь

Отправить сообщение

Конечно, всегда есть возможность внести столько изменений, что предупреждения перестанут считаться эквивалентными. Сейчас для сравнения используются такие свойства предупреждения:

  • тип предупреждения,

  • полное имя функции,

  • путь к файлу,

  • специфичная для конкретного типа предупреждения строка (т. н. "details"), идентифицирующая это предупреждение. В неё могут входить, например, имена переменных или выражения, упоминаемые в тексте предупреждения.

Можно подумать о том, чтобы не использовать путь к файлу, так как полного имени функции достаточно для языков, в которых функции находятся в классах и пространствах имён, а для функций на C включать путь к файлу в полное имя функции.

Подход с комментариями в коде тоже имеет свои недостатки. Например, при изменениях в коде или обновлении версии анализатора ложное срабатывание может исчезнуть, а на той же строке появится истинное предупреждение того же типа. В случае с разметкой на сервере details изменится (например, если в сообщении о разыменовании null теперь говорится о другой переменной), и новое предупреждение не будет размеченным, а при использовании комментария в коде оно останется подавленным.

Разумеется, это не нужно повторять постоянно – для этого и предназначен сервер истории. Возможно, Вы каждый раз создаёте новый сервер вместо того, чтобы один раз создать его и загружать результаты последующих анализов на него. Svace сопоставляет предупреждения с ранее выданными даже при изменениях в анализируемом коде, и ранее размеченные предупреждения останутся размеченными.

Добрый день, Анастасия! Меня зовут Михаил, я младший научный сотрудник ИСП РАН и один из разработчиков Svace. Я хотел бы дополнить комментарий Дмитрия.

Вместо подавления ложных срабатываний можно воспользоваться разметкой – пометить предупреждение как истинное (true positive) или ложное (false positive) в веб-интерфейсе сервера истории (как встроенного, так и Svacer), а затем выбрать фильтр, чтобы не показывать предупреждения, размеченные как ложные. Это решает Вашу задачу и при этом не загромождает исходный код комментариями для подавления предупреждений.

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

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

Эта ссылка – на Windows Services for UNIX, а не Linux. WSL сразу была Windows Subsystem for Linux.

Просто копипастить же начнут, это же код на Swift, а не псевдокод)

Снаряд и броня – разработчики банковских приложений и Skype совершенствуют методы обнаружения джейлбрейка, разработчики твиков добавляют новые обходы для этих проверок.

if UnsafeMutablePointer<FILE>(fopen("/bin/bash", "r")) != nil ||
            UnsafeMutablePointer<FILE>(fopen("/Library/MobileSubstrate/MobileSubstrate.dylib", "r")) != nil ||
            UnsafeMutablePointer<FILE>(fopen("/usr/sbin/sshd", "r")) != nil ||
            UnsafeMutablePointer<FILE>(fopen("/etc/apt", "r")) != nil ||
            UnsafeMutablePointer<FILE>(fopen("/Applications/Cydia.app", "r")) != nil {
            return true
        }

А закрыть файл, если его удалось открыть?

Ну это уже фактически использование мобильного интернета вместо стационарного. Тогда неудивительно.

За месяц, конечно. Это же мобильный интернет. Если музыку в машине через стриминг слушать, а не предварительно скачанную, то 5 гигов (езжу не каждый день).

В 3 гига немного не укладываюсь, 4 обычно хватает.

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

Неочевидно. Если бы значение перечитывалось, то для свойства, имеющего только сеттер, выдавалась бы ошибка компиляции, как и если бы было написано просто int a = X;.

а теперь то же самое, но со свойством:

int _x;
int X { get => _x; set => _x = 1; }
public static void Main()
{
    int a = X = 5;
    Console.WriteLine(a.ToString());
}

кто вспомнит, не подглядывая в спецификацию и не запуская код, какое из "самих значений" вернёт операция присваивания?

iPhone как веб-камеру – это уже есть: https://support.apple.com/ru-ru/HT213244
Не знаю, работает ли это с iPad, у меня нет iPad.

Повезло, что он был не BOOLEAN

В школе в Borland C++ 3.1 я и сам писал без пробелов, потому что на экране 80x25 кода влезало очень мало. А если еще и не разворачивать cmd на полный экран, то шрифт был очень широким, поэтому арифметические выражения с пробелами выглядели глупо.


зачем

писать

код

через

строчку?

Информация

В рейтинге
2 472-й
Зарегистрирован
Активность