PVS-Studio 7.04

图片4

夏季不仅是假期,而且是丰硕的工作时间。 阳光明媚的日子令人振奋,以至于有足够的精力进行后期散步和大型代码提交。 事实证明,第二个夏季PVS-Studio 7.04版本相当大,因此,建议您注意本新闻稿,其中将告诉您所有情况。

PVS-Studio是一种工具,旨在检测用C,C ++,C#,Java编写的程序源代码中的错误和潜在漏洞。 它适用于Windows,Linux和macOS环境。

检查各种开源项目期间在代码中发现的大量错误清楚地证明了分析器的功能。

这是PVS-Studio 7.04版本附带的新功能的概述。

搜索具有Copyleft许可证的文件


在执行任务时,开发人员会从许多不同的地方获取代码。 复制粘贴代码的一个流行来源是Stackoverflow网站和类似网站。 在某些情况下,开发人员会从开源项目中获取代码,而不检查许可证要求。 因此,封闭源项目可能会意外地从具有Copyleft许可证的开放源项目中获取一些文件,这有义务使整个项目代码开放。 在拥有大量员工的公司中,很难对此进行跟踪,而此类行为可能会带来不利的风险和问题。 因此,PVS-Studio现在具有诊断程序,它将有助于查找此类文件。 它涉及所有支持的语言(C,C ++,C#,Java)。

不同语言的诊断号:


让我们仔细看看这些诊断并找出它们的用途。 分析器将发出警告的注释示例:

/* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ 

对于封闭项目


如果在封闭的项目中添加具有此类许可证(在本例中为GPL3)的文件,则由于该许可证的特殊性,您必须打开其余代码。

这种许可证被称为“ 病毒式 ”,因为它们具有扩展到项目文件其余部分的能力。 问题在于,在关闭的项目中至少使用一个带有这种许可证的文件会自动使整个源代码打开,并有义务将其与二进制文件一起分发。

诊断程序正在寻找以下“病毒”许可证:

  • AGPL-3.0
  • GPL-2.0
  • GPL-3.0
  • LGPL-3.0

如果在封闭的项目中检测到具有Copyleft许可证的文件的使用情况,可以采取以下操作:

  1. 不要在您的项目中使用此类代码(库);
  2. 替换使用的库;
  3. 使项目开源。

对于开放项目


我们知道,此诊断不适用于开源项目。 PVS-Studio团队致力于开发开源项目,帮助修复其中的错误 ,并提供免费的许可证选项 。 但是,我们的产品是B2B解决方案,因此默认情况下启用此诊断。

如果您的代码是根据上述的copyleft许可之一分发的,则可以通过以下方式禁用此诊断(对于C \ C ++为V1042):

  • 如果您将PVS-Studio插件用于Visual Studio,则可以通过转到选项> PVS-Studio>可检测的错误> 1.常规分析> V1042来禁用此诊断 此后,它将不会显示在分析器报告中。 该方法的缺点是在保存错误时(或如果从命令行运行分析)错误仍将被写入分析器的日志中。 因此,当您在另一台计算机上打开此类日志或将分析结果转换为另一种格式时,以这种方式禁用的消息可能会再次出现。
  • 如果您不使用插件,但想阻止整个团队的规则,或者将其从分析器的报告中删除,则可以在配置文件(.pvsconfig)中添加注释“ //-V :: 1042”,或到全局头文件之一。 对于使用Visual C ++的开发人员,一个不错的选择是在“ stdafx.h”中添加此注释。 文件。 此注释告诉分析仪禁用V1042诊断。 文档提供了有关使用注释禁用诊断的更多详细信息。
  • 如果使用Plog Converter实用程序转换报告,则可以使用“ -d”键禁用诊断。

对于C#,V3144是诊断的相应编号V6071-对于Java。

扩展危险许可证清单


如果您知道目前无法检测到PVS-Studio的其他类型的“病毒”许可证,欢迎您通过反馈表格告知我们。 我们将在下一个版本中添加它们。

新诊断


C,C ++(常规)


  • V1040 。 预定义宏名称的拼写可能出现的错字。
  • V1041 。 类成员使用悬空引用进行初始化。
  • V1042 。 该文件标记有copyleft许可证,这需要您打开派生的源代码。
  • V1043 。 标头中声明了一个全局对象变量。 将在所有包含此头文件的翻译单元中创建它的多个副本。

我想特别注意编号为V1040的诊断。 即使在测试阶段,我们也设法在著名的CMake项目的库中找到了一个有趣的错误:

V1040预定义的宏名称的拼写可能有错字。 “ __MINGW32_”宏类似于“ __MINGW32__”。 winapi.h 4112

 /* from winternl.h */ #if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif 

__MINGW32_名称有错字。 最后,缺少一个下划线字符。 如果使用此名称搜索代码,则可以看到在项目中使用了两侧带有两个下划线字符的版本:

图片8

您可以在以下文章中检查CMake项目中所有发现的错误:“ CMake:项目质量不可原谅的情况 ”。

C,C ++(MISRA)


  • V2551 。 米斯拉 变量应在使其可见度最小的范围内声明。
  • V2552 。 米斯拉 具有枚举基础类型的表达式的值应对应于枚举的枚举器。
  • V2553 。 米斯拉 一元减运算符不应应用于无符号类型的表达式。
  • V2554 。 米斯拉 包含增量(++)或减量(-)的表达式不应有其他副作用。
  • V2555 。 米斯拉 移位表达式不正确。
  • V2556 。 米斯拉 当关联的流已经关闭时,使用指向FILE的指针。
  • V2557 。 米斯拉 sizeof()运算符的操作数不应有其他副作用。

C#


  • V3140 属性访问器使用不同的后备字段。
  • V3141 。 “ throw”下的表达式可能为空,这可能导致NullReferenceException。
  • V3142 。 检测到无法访问的代码。 可能存在错误。
  • V3143 。 “值”参数在属性设置器中重写,此后不再使用。
  • V3144 。 该文件标记有copyleft许可证,这需要您打开派生的源代码。
  • V3145。 不安全地取消引用WeakReference目标。 在访问“目标”属性之前,该对象可能已被垃圾回收。

对于C#分析器,我们添加了对来自属性getter和setter以及异步方法中的\写入值的评估。

当前,我们正在努力改进对将字段传递给方法的对象的值和属性的监视,以及监视turple的内容。 这些改进将在下一版分析仪中提供。

爪哇


  • V6068 可疑使用BigDecimal类。
  • V6069 负“字节” /“短”值的无符号右移分配。
  • V6070 在对象上进行不安全的同步。
  • V6071 该文件标记有copyleft许可证,这需要您打开派生的源代码。

SonarQube 7.9 LTS


期待已久的发布


自上次发布SonarQube 6.7的LTS版本以来已经快两年了。 从SQ 7.x开始急切地等待新版本,当LTS发布时,用户开始积极切换到新版本,这引起了许多问题。 很快,SQ 7.9.1 LTS进行了较小的修复,第三方插件开发人员也进行了修补。

幸运的是,PVS-Studio插件只有一个问题,与切换到Java 11有关,该问题很快得到修复,我们的客户立即切换到了可行的版本。

我们还与旧的SonarQube版本保持兼容,并且受支持的版本列表如下: SonarQube 6.7 LTS和更高版本

更多受支持的语言插件


PVS-Studio插件仅将分析结果转换为SonarQube数据库的格式。 换句话说,它仅下载SQ中的PVS-Studuio分析结果。 要使SonarScanner实用程序完全运行,您需要安装用于编程语言的插件。 我们没有开始开发已经存在的插件,因此我们只是添加对已经存在的流行插件的支持。 在此版本中,我们增加了与Sonar C社区和SonarCFamily语言插件的兼容性。

支持的语言插件的完整列表如下所示:


要上传PVS-Studio分析的结果,足够从该列表中安装至少一个插件。 大多数用户仅安装Sonar C ++社区,SonarC#或SonarJava。 其他更具体的项目可能需要使用其他插件。

在选择插件时,请考虑社区插件与SonarCFamily不兼容的事实。 但是,如果仅使用SonarQube Community Edition,则不会出现此类问题。

新设置页面


以前,只能通过配置文件sonar-project.properties配置分析器 。 没有关于这种方法的抱怨。 这非常方便,并且99%的时间都可以使用,但是我们在SonarQube服务器端的管理>配置> PVS-Studio中进行了附加设置,因为它在某些情况下可能是首选。

设置页面如下所示:

图片10

以两种方式设置配置时,文件sonar-project.properties中指定的配置具有最高优先级。

IntelliJ IDEA的插件


新的IntelliJ IDEA和PVS-Studio版本的发布日期不同。 最近,我们遇到了IntelliJ IDEA 192. *被发布但无法安装PVS-Studio插件的情况。 在此版本中,我们增加了对最新IntelliJ IDEA版本的支持,并进行了改进,以避免将来出现类似问题。

詹金斯插件


PVS-Studio插件

PVS-Studio插件用于以HTML格式在Jenkins持续集成系统中发布PVS-Studio分析仪结果的报告。 以前,此插件仅对Windows用户可用,因为它会自动调用报表转换器,并且仅在Windows上才使用。 在PVS-Studio 7.04中,该插件仅支持必须在单个步骤中生成的HTML报告,但是此措施使该插件跨平台。

警告NG插件

对于Jenkins,有一个有用的插件Warnings Next Generation插件,可用于查看各种工具的分析结果。 我们最近在其中添加了PVS-Studio支持。 使用此插件加载PVS-Studio分析结果的功能已在6.0.0版中提供,其发行版本与PVS-Studio 7.04版本不谋而合:

图片1

其他改进


PVS-Studio_Cmd

PVS-Studio_Cmd.exe现在具有特殊的操作模式-凭据。 此模式使您可以创建设置文件并输入许可证信息,而无需使用GUI界面(例如,Visual Studio插件或C and C ++ Compiler Monitoring UI实用程序)。 当在与云解决方案集成的构建服务器(可能缺少GUI实用程序),容器中的容器上使用时,此模式特别重要。

虚幻引擎项目分析

我们在Visual Studio的PVS-Studio插件中添加了选项AutoloadUnrealEngineLog ,使您可以在分析后自动将分析器报告上载到PVS-Studio输出窗口中。 如果没有此选项,则必须通过插件菜单手动上传日志。

此外,文档部分“ 虚幻引擎项目的分析 ”还描述了标准构建脚本的更改,这些更改使您可以在一个动作中进行构建和分析。 如果不修改脚本(在添加标志-StaticAnalyzer = PVSStudio以启动参数时),则仅分析项目,而不构建项目。

CLMonitor

对于CLMonitor实用程序,我们添加了监视特定进程的编译器运行的功能。 这使您可以监视仅与特定项目相关的编译器运行,即使在并行构建多个项目期间也是如此。 要在此模式下工作,将使用标志--parentProcessID%PID% (CLMonitor监视与指定子进程相关的子进程)和--attach (CLMonitor监视与当前控制台子进程相关的子进程)。

pvs-studio-analyzer

pvs-studio-analyzer实用程序中添加了--ignore-ccache标志,该标志用于检查Linux和macOS中的项目:

 pvs-studio-analyzer analyze ... --ignore-ccache ... 

如果在项目构建中使用了ccache实用程序,则PVS-Studio将以增量分析模式运行。 要检查整个项目而不重置ccache实用程序的缓存,请选择此标志。

其他连结


订阅以了解我们的新出版物:

  1. 推特: @Code_Analysis
  2. YouTube: PVS-Studio
  3. 脸书: @StaticCodeAnalyzer
  4. Instagram的: @pvsstudio
  5. 电报: PVS-Studio
  6. RSS: viva64-blog-en

PVS-Studio:

  1. PVS-Studio产品页面
  2. 资料下载
  3. 文献资料
  4. 客户群

Source: https://habr.com/ru/post/zh-CN466195/


All Articles