Мы решили в меру своих сил регулярно искать и устранять потенциальные уязвимости и баги в различных проектах. Можно назвать это помощью open-source проектам. Можно — разновидностью рекламы или тестированием анализатора. Еще вариант — очередной способ привлечения внимания к вопросам качества и надёжности кода. На самом деле, не важно название, просто нам нравится это делать. Назовём это необычным хобби. Давайте посмотрим, что интересного было обнаружено в коде различных проектов на этой неделе. Мы нашли время сделать исправления и предлагаем вам ознакомиться с ними.
Читать полностью »
Рубрика «Компиляторы» - 36
Дефекты безопасности, которые устранила команда PVS-Studio на этой неделе: выпуск N2
2017-03-17 в 12:59, admin, рубрики: C, c++, clang, freebsd, gcc, pvs-studio, Блог компании PVS-Studio, информационная безопасность, Компиляторы, ошибки в коде, ошибки программистов, Си, статический анализ кодаPosition-independent code (PIC) в разделяемых библиотеках
2017-03-15 в 7:02, admin, рубрики: C, disassembling, linux, pic, shared library, Блог компании Badoo, Компиляторы, Разработка под Linux, системное программирование
Привет. Меня зовут Марко, и я системный программист в Badoo. Я очень люблю досконально разбираться в том, как работают те или иные вещи, и тонкости работы разделяемых библиотек в Linux не исключение. Я представляю вам перевод именно такого разбора. Приятного чтения.
Универсальный грамматический анализатор естественных языков с нуля. Выпуск 1
2017-03-11 в 12:12, admin, рубрики: Компиляторы, лингвистика, лингвистический анализ, лингвистическое по, метки: КомпиляторыКомпиляторы, интерпретаторы… Сколько им посвещено книг и проектов! Баста, надоело!
А вот сунешся в область анализа естественных языков, и никакой информации! А все что есть как-то очень сложно, непонятно и не универсально.
Была у меня идея создать средневековую лингвистическую новеллу. Чтобы можно было разговаривать с персонажами на каком нибудь древнем естественном или вымышленном языке. На Латыни например? И на Квенья. И чтобы они понимали. А почему бы и нет?
Читать полностью »
Address Sanitizer, или Что делать, если не работает valgrind
2017-03-07 в 7:16, admin, рубрики: C, cgo, Go, sanitize, valgrind, Компиляторы, метки: cgo, valgrindСлучилась непростая ситуация. Есть код, написанный на С, который активно используется через cgo в проекте, написанном на Go. В какой-то момент программа начала падать с ошибками от malloc: то segfault, то memory corruption.
Логичная мысль: нужен valgrind с его memcheck, чтобы проверить, кто лезет поперёк батьки в пекло в невалидную память. Однако, попытка скормить валгринду бинарник, полученный от go build, приведёт только к разочарованию — даже на простом Hello World валгринд разразится сотнями ошибок и отправит разработчика на известные координаты (спойлер: "Go fix your program!").
Это происходит из-за того, что go runtime довольно специфичен и значительно отличается от такового в С. (Подробности можно спокойно найти по запросу «golang valgrind»).
Так как же нам разобраться, что происходит?
Читать полностью »
Ищем и анализируем ошибки в коде Media Portal 2
2017-03-06 в 7:38, admin, рубрики: .net, C#, open source, pvs-studio, static code analysis, Блог компании PVS-Studio, Компиляторы, статический анализ кодаMedia Portal 2 — это открытое программное обеспечение класса медиа центр, которое позволяет смотреть видео, фотографии, слушать музыку и многое другое. Для нас, разработчиков статического анализатора PVS-Studio, это еще одна возможность проверить интересный проект, рассказать людям (и разработчикам в том числе) о найденных ошибках и, в свою очередь, еще раз показать возможности нашего анализатора.
Как я писал компилятор С++. Пересказ спустя 15 лет
2017-02-26 в 23:02, admin, рубрики: c++, как стать экспертом, Компиляторы, Программирование, свой велосипед, свой с++ компилятор, метки: как стать экспертом, свой велосипед, свой с++ компилятор15 лет назад не было Хабрахабра, не было фейсбука, и что характерно, не было компилятора С++, с выводом диагностических сообщений на русском. С тех пор, вышло несколько новых стандартов С++, технологии разработки сделали гигантский скачек, а для написания своего языка программирования или анализатора кода может потребоваться в разы меньше времени, используя существующие фреймворки. Пост о том, как я начинал свою карьеру и путем самообразования и написания компилятора С++, пришел к экспертному уровню. Общие детали реализации, сколько времени это заняло, что получилось в итоге и смысл затеи — тоже внутри.
Там добавим const, отсюда удалим const…
2017-02-21 в 10:11, admin, рубрики: c++, const, Visual Studio, Блог компании Инфопульс Украина, Компиляторы, системное программированиеЯ только что закончил серию изменений в коде браузера Chrome, которая уменьшила размер его бинарника под Windows примерно на 1 мегабайт, перенесла около 500 КB из read/write сегмента в read-only, а также уменьшила потребление оперативной памяти в общем примерно на 200 KB на каждый процесс Chrome. Удивительное заключается в том, что конкретно данная серия изменений состояла исключительно из удаления и добавления ключевого слова const в некоторых местах кода. Да, компиляторы — странные.
Эта задача возникла, когда я писал документацию для некоторых утилит, которые я использую для исследования регрессий кода, связанных с увеличением размера скомпилированных бинарников под Windows. Я запустил утилиту, скопировал в документацию её вывод и начал его описывать, когда заметил нечто странное: несколько больших глобальных объектов, которые согласно архитектуре должны были быть константными, почему-то находились в сегменте read/write данных. Сокращённая версия того вывода утилиты показана ниже:
Большинство исполняемых форматов имеют как минимум два сегмента данных — один для read/write объектов и ещё один для read-only. Если у вас есть константные данные, такие, например, как kBrotliDictionary, то их будет логично поместить в read-only сегмент, который является сегментом «2» в бинарнике Chrome под Windows. Однако некоторые константные данные, такие как unigram_table, device::UsbIds::vendors_ и blink::serializedCharacterData были в секции «3», то есть в read/write сегменте.
Дивный новый Roslyn: Кому нужны собственные анализаторы кода и скриптинг на C#?
2017-02-20 в 14:19, admin, рубрики: .net, C#, roslyn, Блог компании JUG.ru Group, Компиляторы, Скриптинг, статический анализ кодаВ мире .NET все прекрасно — платформа движется в правильном направлении, новые технологии обкатываются и встают на ноги. В последнее время много разговоров про .NET/ASP.NET Core, и кажется, что все забыли про Roslyn, который предоставляет широкие документированные возможности по работе с кодом как во время рантайма, так и в процессе разработки.
Чтобы исправить это, мы взяли интервью у Filip W, Microsoft MVP, контрибьютора Roslyn и просто одного из наиболее популярных в мире ASP.NET блоггеров. Почему Filip считает, что изменения в новом С# могут пройти незамеченными, зачем писать собственные анализаторы кода, а также почему скриптинг на C# лучше, чем любом скриптовом языке?
Читать полностью »
Портирование — дело тонкое: проверка Far Manager под Linux
2017-02-16 в 7:59, admin, рубрики: c++, far manager, open source, pvs-studio, static code analysis, Блог компании PVS-Studio, Компиляторы, статический анализ кодаОдним из популярных файловых менеджеров в среде Microsoft Windows является Far Manager, принявший эстафету у Norton Commander, созданной еще для DOS. Far Manager позволяет облегчить работу с файловой системой (создание, редактирование, просмотр, копирование, перемещение, поиск, удаление файлов), а также расширяет стандартный функционал (работа с сетью, архивами, резервными копиями и т.д.). Недавно была произведена работа по портированию Far Manager на Linux, и на текущий момент была выпущена альфа-версия. Команда PVS-Studio не могла обойти стороной данное событие и решила проверить качество адаптированного кода.