static-analysis 相关问题

“静态分析”是指用于分析任意属性的应用程序代码的软件工具(或它们的用途),例如错误(未初始化的变量,可能的SQL注入攻击,这个代码死了,参数可以为null,...... )或结构(这段代码的调用图是什么?有重复的代码吗?组件之间传递什么信息?)。

函子上显式转换运算符的基本原理

当我短暂休息时,我的工作场所改用静态代码分析器。 他们对我正在从事的项目进行了运行,分析仪标记的一个特定问题如下所示(

回答 1 投票 0

在 macOS 上使用 libClang 解析 C++ 代码时查找标准库头文件时出错

我正在做一个项目,使用Clang库来解析C++源代码并进一步静态分析其AST。 Linux 上一切正常(该项目特别支持 Ubuntu 发行版...

回答 1 投票 0

有没有一个Python linter可以根据类型提示检查类型?

我正在寻找一个Python linter,它可以根据代码中的类型提示检查类型的使用情况。 目的是运行一次检查来验证样式、逻辑和类型错误。 我需要跑...

回答 2 投票 0

如何让mypy在没有父包的情况下跳过相对导入

假设由于一些丑陋的包装原因,我有一个文件 foo.py 其中包含: 尝试: 从 。进口酒吧 除了导入错误: 进口酒吧 假设文件结构是这样的,没有__init...

回答 1 投票 0

检测丢失处置的工具

我正在寻找任何可以检测执行数据访问和文件操作的类上丢失的 dispose 调用的工具。如果它检查其他性能问题那就太好了。 顺便说一句,我需要...

回答 3 投票 0

未使用作业的静态分析

我有一个玩具编程语言的 AST。我需要找到未使用的赋值,即赋值使得写入此变量的值保持未读取状态,直到程序结束,或者直到...

回答 1 投票 0

从蒙特卡罗模拟生成 PDF

如果我有一个像这样生成的随机变量的分析pdf y= (x**(d-1)*e**(-x/g))/(数学.gamma(d)*g**d) 其中 d 和 g 是常数 如何使用蒙特卡罗模拟生成此 pdf...

回答 1 投票 0

cppcheck 的警告,“隐藏同名的 typedef”

这是一条 cppcheck 警告消息。 变量“BUFFER_INFO”隐藏同名的 typedef BUFFER_INFO 定义如下。 typedef 结构体 tagBufferInfo { CRITICAL_SECTION cs; 浅黄色...

回答 2 投票 0

我可以配置 clang-tidy 来接受除 NULL 之外的某些死存储值吗?

例如,以下函数使用 Windows API 将文件加载到内存中,并使用在其他地方定义为 POLYNOMIAL 的多项式计算其 CRC32 校验和: #包括 例如,以下函数使用 Windows API 将文件加载到内存中,并使用在其他地方定义为 POLYNOMIAL 的多项式计算其 CRC32 校验和: #include <Windows.h> UINT32 WINAPI GetFileCRC32(WCHAR *wszFileName, LPDWORD lpdwError) { HANDLE hHeap = GetProcessHeap(); HANDLE hFile = INVALID_HANDLE_VALUE; LARGE_INTEGER liSize; DWORD dwError, dwRead; SIZE_T cbAlloc, i, i2; BYTE *bBuffer = NULL; UINT32 uCRC = 0xFFFFFFFFU; hFile = CreateFileW(wszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hFile) { dwError = GetLastError(); goto cleanup; } GetFileSizeEx(hFile, &liSize); do { cbAlloc = min(liSize.QuadPart, ALLOC_MAX); bBuffer = (BYTE *) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, cbAlloc); if (NULL == bBuffer) { dwError = ERROR_OUTOFMEMORY; goto cleanup; } if (!ReadFile(hFile, bBuffer, cbAlloc, &dwRead, NULL)) { dwError = GetLastError(); goto cleanup; } for(i = 0; i < cbAlloc; i++) { uCRC ^= bBuffer[i]; for (i2 = 0; i2 < 8; i2++) { uCRC = (uCRC >> 1) ^ ((uCRC & 1) ? POLYNOMIAL : 0); } } HeapFree(hHeap, 0, bBuffer); bBuffer = NULL; liSize.QuadPart -= cbAlloc; } while(liSize.QuadPart); dwError = ERROR_SUCCESS; cleanup: if (hFile != INVALID_HANDLE_VALUE) { CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE; } if (bBuffer != NULL) { HeapFree(hHeap, 0, bBuffer); bBuffer = NULL; } *lpdwError = dwError; return uCRC; } 默认情况下,Clang-Tidy 不会将 bBuffer = NULL 行检测为死存储,我认为是因为它认识到将指针设置为 NULL 的做法是一种防御性编程做法,以防止双重释放错误。不过,我还在关闭后将 hFile 的值设置回 INVALID_HANDLE_VALUE,作为同一模式的一部分。 但是,clang-tidy 确实抱怨函数末尾的 INVALID_HANDLE_VALUE 分配(这是强制转换为 -1 的数值 HANDLE)作为“死存储”。 如何配置 clang-tidy 分析以接受 NULL 以外的值作为免于死存储分析的值? 不,无法配置 clang-tidy deadcode.DeadStores 检查器忽略 nullptr 以外的值分配。 忽略 nullptr 赋值的代码位于 DeadStoresChecker.cpp:340: if (DeclRefExpr *DR = dyn_cast<DeclRefExpr>(B->getLHS())) if (VarDecl *VD = dyn_cast<VarDecl>(DR->getDecl())) { // Special case: check for assigning null to a pointer. // This is a common form of defensive programming. const Expr *RHS = LookThroughTransitiveAssignmentsAndCommaOperators(B->getRHS()); QualType T = VD->getType(); if (T.isVolatileQualified()) return; if (T->isPointerType() || T->isObjCObjectPointerType()) { ===> if (RHS->isNullPointerConstant(Ctx, Expr::NPC_ValueDependentIsNull)) return; } // Special case: self-assignments. These are often used to shut up // "unused variable" compiler warnings. if (const DeclRefExpr *RhsDR = dyn_cast<DeclRefExpr>(RHS)) if (VD == dyn_cast<VarDecl>(RhsDR->getDecl())) return; // Otherwise, issue a warning. DeadStoreKind dsk = Parents.isConsumedExpr(B) ? Enclosing : (isIncrement(VD,B) ? DeadIncrement : Standard); CheckVarDecl(VD, DR, B->getRHS(), dsk, Live); } 指定线路呼叫 Expr::isNullPointerConstant 检查 nullptr,但这里没有任何灵活性允许 其他值。 在引用片段的末尾有一个对 CheckVarDecl 的调用, 它根据变量的类型进行更多的过滤 (例如,忽略引用)在发布报告之前。它 接受 RHS 表达式,但仅使用它来获取源位置 范围;没有根据分配的值进行过滤。 我看到的唯一半可行的解决方法是将作业包装在 调用恒等宏 (#define ID(x) x),因为检查器拒绝 报告宏扩展内的代码。

回答 1 投票 0

在 EditorConfig 中关闭 C# 变量丢弃

在 VSCode 中格式化和自动修复 C# 文件中的“linting”错误时,它似乎丢弃了我未使用的变量。基本上它将 _ = 放在所有内容的前面。 这样做是因为

回答 2 投票 0

为了满足 Linter 的要求而修改代码是不好的做法吗

我使用 neovim 并通过 mason-lspconfig 使用 Pyright linter 来静态类型检查我的代码。我写了很多类型提示;这是一个例子: def 示例(user_input: str) -> 无: t...

回答 1 投票 0

在项目之间共享 linter 配置

我想在多个Python项目之间共享linter(flake8、pylint等)的配置。 我对这个主题进行了一些研究,除了 https://pypi.org/

回答 1 投票 0

进口订单编码标准

PEP8 建议: 导入应按以下顺序分组: 标准库导入 相关第三方进口 本地应用程序/库特定导入 你什...

回答 6 投票 0

Android 和 Kotlin DeteKt:自定义规则未运行

尝试在 Detekt 自定义规则上创建一些游乐场,但它不起作用。甚至不尝试查找规则集文件。 gradle 去 插件{ id 'com.android.application' id 'ko...

回答 1 投票 0

静态分析可以检测内存泄漏吗?

很久以前就获得了 ISTQB 认证,我记得它有以下区别: -静态分析:对源代码执行,检测无法访问的代码、未分配的值...

回答 4 投票 0

PhanEnumCannotImplement - 接口不允许扩展 BackedEnum 接口

我正在创建一个扩展 BackedEnum 的接口 SurveyAnswer。我正在扩展 BackedEnum 以确保创建的枚举得到支持。 接口 SurveyAnswerInterface 扩展了 BackedEnu...

回答 1 投票 0

静态代码分析和静态应用程序安全测试

我需要免费工具来为我的 Azure Devops 管道实施 SCA 和 SAST。 我开始研究一些工具,如 fortify、checkmark、trivy、balckduck、sonarqube、snyk 等 有免费的吗...

回答 1 投票 0

静态分析工具,用于捕获绕过Spring缓存@Cacheable方法的自调用

我知道这是因为在 Spring 中创建代理来处理缓存、事务相关功能的方式。修复它的方法是使用 AspectJ 但我不想采用它

回答 2 投票 0

自定义 lint 规则:如何修复“此注释不适用于目标‘表达式’”

我正在为 android/compose 编写我的第一个自定义 lint 检测器: “不要使用标准按钮,使用我们专门设计的自定义按钮” 检测器本身按预期工作: 棉绒

回答 1 投票 0

我可以通过静态分析器(编译时)或非特定自动测试来防止 Nest.js 路由模式及其参数 DTO 不匹配吗?

考虑控制器中的以下路由: @Get('/:uuid') findById(@Param() 参数:FindProjectParamsDto): Promise { 返回 this.projectsService.findById(params); } 比方说...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.