Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Checking with PVS-Studio static analyser #255

Open
SviatoslavRazmyslov opened this issue Feb 16, 2017 · 12 comments
Open

Checking with PVS-Studio static analyser #255

SviatoslavRazmyslov opened this issue Feb 16, 2017 · 12 comments

Comments

@SviatoslavRazmyslov
Copy link

To demonstrate the capabilities of our analyzer, we regularly perform analysis of open source projects. We had recently checked the Far Manager project.

Here is the link to the article about it: Porting is a Delicate Matter: Checking Far Manager under Linux

If you have any questions, or if you are interested in the evaluation of our static analyzer or in any other source code quality control services that our company provides, please contact us at [email protected].

@lieff
Copy link
Contributor

lieff commented Feb 16, 2017

@elfmz
Copy link
Owner

elfmz commented Feb 16, 2017

ну, большинство рассмотренных багов приехало из оригинального кода, так что к портированию отношения не имеют, но есть и несколько моих косяков)

@elfmz
Copy link
Owner

elfmz commented Feb 17, 2017

Решил поковырять немного..

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

  • /V567 Undefined behavior. The '::ViewerID' variable is modified while being used twice between sequence points. viewer.cpp 117/
    А вот..нет. Слева и справа тут стоят две разные переменные, одна - глобальная, другая - член класса, согласно области видимости. Сам в шоке, обычно такое различие делают через this->, авторы фара соригинальчичали конечно, но однако же проверил - все ок. Две совершенно разные переменные.

Но надо признать есть и реальные косяки.

@SviatoslavRazmyslov
Copy link
Author

SviatoslavRazmyslov commented Feb 17, 2017

@elfmz про неопределённое поведение довольно точные диагностики, я ещё раз посмотрю.

Багов тут нет, просто неаккуратненько..

Такого очень много встречаем, пытаемся объяснить, что можно сделать лучше.

Но надо признать есть и реальные косяки.

Если что, пишите, что-нибудь подскажем или анализатор поправим.

@elfmz
Copy link
Owner

elfmz commented Feb 17, 2017

Варнинги на APIStringMap.cpp прямиком из кода wine - dlls\kernel32\locale.c, даже не знаю что с ними делать. С одной стороны if-ы вроде как "сокращаются", с другой - если их "сократить" то код станет менее красивым и читабельным, так что пожалуй оставлю как есть :)
Кстати вот wine тоже стоило бы потрясти.

@ghost
Copy link

ghost commented Feb 17, 2017

@elfmz

А можно глупый вопрос? Зачем там используется Wine, если это полноценный порт?

@SviatoslavRazmyslov
Copy link
Author

Кстати вот wine тоже стоило бы потрясти.

Уже 2 раза трясли (тут, тут), но у нас уже очередь. Разрабатываемые проекты можно трясти вечно, отсюда вывод - интеграция и регулярный анализ есть верный сценарий использования.

@elfmz
Copy link
Owner

elfmz commented Feb 18, 2017

А можно глупый вопрос? Зачем там используется Wine, если это полноценный порт?
Собственно функции работы с кодировками WideCharToMultibyte/MultibyteToWideChar строк целиком взяты из wine. А насчет 'зачем именно из wine' - а почему нет? Можно конечно переделать на libiconv, но зачем?

@ghost
Copy link

ghost commented Feb 18, 2017

Собственно функции работы с кодировками WideCharToMultibyte/MultibyteToWideChar строк >целиком взяты из wine. А насчет 'зачем именно из wine' - а почему нет? Можно конечно переделать >на libiconv, но зачем?

тогда всё понятно.. еще как вариант на будущее... можно попробывать в ReactOS посмотреть...

@unxed
Copy link
Contributor

unxed commented Feb 20, 2017

ReactOS сами импортируют из вайна всё, что могут по части юзерспейса, а свои улучшения шлют потом обратно. Так что смысла нет.

А вот libiconv - хорошая идея. Тут ведь как. Юникод как стандарт обновляется же регулярно, и я не уверен, что эти изменения не влекут за собой необходимость обновления соответствующих функций. Так что, как по мне, лучше уж пусть пакетный менеджер волнуется, чтобы у юзера была свежая libiconv, чем регулярно обновлять импортированный вайновский код.

@elfmz
Copy link
Owner

elfmz commented Mar 14, 2017

Оказалось что фикс PVS варнинга ( 748c143 ) вызвал баг #264
Вобщем, как было вначале - было правильно. sizeof(void *) в SetUserData хэндлится особым, не очевидным с первого взгляда, образом.

@pavel-pimenov
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants