问题标签 [splint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 如何在使用夹板工具检查源代码时包含头文件?
我创建了 2 个 C 程序源代码文件和一个仅包含函数声明的头文件。
我的模式.h
pattern_main.c
模式搜索.c
在 linux 上使用夹板工具检查此代码时,
我收到以下错误:
我怎样才能使它正确?
gcc - 夹板与 gcc:外部静态代码分析工具值得为 C 代码库付出努力吗?
我正在做一个相当复杂的项目,作为一个额外的复杂性,它是一个内核 Linux 模块。在这样的代码库上运行像夹板这样的 linting 工具当然不是不可能的 [1],但是微不足道的努力还不足以让事情顺利进行。
在我投入更多时间之前,我希望能就这个问题获得一些反馈和意见。有了足够多的标志,gcc 会进行大量检查。在实践中使用单独的静态代码分析工具是否仍然值得?
[1] http://www.cs.virginia.edu/pipermail/splint-discuss/2005-January/000531.html
c - 夹板边界检查的奇怪行为
有夹板专家吗??我正在尝试使用夹板静态分析我在 C 中拥有的大型项目。我看到过多的边界检查错误显然不是边界错误。我编写了一个小测试程序来尝试隔离问题,并在对代码运行夹板时注意到一些非常奇怪的警告。我有3个不同的例子。这是第一个:
当我按预期使用时,arr[3]
分配会生成一个警告+bounds
,但当我使用+likely-bounds
. +likely-bounds
甚至做什么?它似乎不起作用。第二个例子:
在此示例中,夹板抱怨我正在读取数组边界之外的内容(“A memory read references memory超出了分配的存储空间。”)var = arr[i]
尽管我显然不是。这应该是一个警告,因为数组中的值没有初始化,但这不是我得到的警告。初始化数组中的最后一个值将清除错误(但初始化第一个或第二个不会)。难道我做错了什么?在第三个例子中:
生成警告arr[3] = 0
,但不生成警告var = arr[i]
,即使循环显然超出了数组的边界。看起来写入数组末尾会扩展夹板认为数组的大小。这怎么可能?
简而言之,我的问题是:
- 可能边界标志有什么作用?
- 有什么方法可以让夹板给我与越界有关的合法错误?
- 有什么方法可以使夹板不会增加访问超出其界限的数组的大小?目前,夹板报告了 750 多个警告,我没有时间一一验证每个警告。
parse-error - /usr/include/arpa/inet.h:35:27:夹板中的解析错误
在用夹板检查我的代码时,我遇到了一个问题。起初我在 POSIXLIB 上遇到错误。所以我用 +posixlib 运行夹板如下,
但我收到以下错误:
夹板 3.1.1 --- 2004 年 6 月 15 日
如何解决此错误?
c - 什么是夹板中的“新鲜存储”?
我在 Splint 文档中搜索了“新鲜存储”,并发现了它的提及,但没有正式的定义。我理解并正在使用其他修饰符,例如 null 或 only。我只是不确定什么是新存储。
情况是这样的:
这是一个家庭作业,但这个问题不必直接与家庭作业有关。这是一个夹板问题。
c - 立即地址传输不一致 SPLINT
我在这里有一个代码段,但 SPLINT 在这里给了我一个警告
我正在尝试解决此问题,请任何人都可以通过一些了解。我已经在谷歌上搜索了 3 个小时,还没有找到解决方案。c - 夹板:在 for 循环中解析错误
我使用夹板作为 c99 代码的静态分析器。
Splint 似乎不太符合 c99 标准。因此我应用了这个补丁: http ://www.cs.virginia.edu/pipermail/splint-discuss/attachments/20080718/52cc25f6/attachment.obj
现在,由于声明不在顶部,我没有收到任何解析错误。
但是,如果我在 for 语句中放入变量声明,我仍然会在 for 循环中遇到解析错误。例如:
一种解决方法是这样写:
但由于我不想调整我所有的 for 循环,我想知道是否有可用的补丁来解决这个问题。
c - 夹板如何进行污点分析
如何使用 Splint 进行污点分析?
我已经在我的 Ubuntu 12.04 上安装了 Splint。创建了一个小测试用例,如下所示:
还创建了具有以下内容的 splint.xh 文件:
还创建了具有以下内容的 splint.mts 文件:
然后最后用命令运行夹板工具:
其中 prg001.c 是样本输入,“splint”是指 splint.mts 和 splint.xh 文件。所有文件都在当前目录中。
我收到的输出是:
夹板 3.1.2 --- 2012 年 8 月 21 日
prg001.c: (在函数 main) prg001.c:6:1: printf 的格式字符串参数不是编译时常量:格式参数在编译时是未知的。这可能会导致安全漏洞,因为无法对参数进行类型检查。(使用 -formatconst 禁止警告) prg001.c:3:14: 未使用参数 argc 函数体中未使用函数参数。如果类型兼容性或未来计划需要参数,请在参数声明中使用 / @unused@ /。(使用 -paramuse 禁止警告)
完成检查 --- 2 个代码警告
输出中没有任何污点分析的提示。有人可以帮助我了解如何使用 Splint 完成污点分析。
谢谢
c - C的污点分析
我需要对我的 C 程序执行静态污点分析。我尝试使用夹板,没有运气。是否有任何其他开源或免费软件工具可用于执行污点分析?
如果是,您能否也提及使用它的方式或参考任何链接。感谢你的帮助。谢谢
c89 - C90 转换为底层抽象类型
依赖于日志相关函数的日志结构如下所示:
在这个日志记录函数中,有一个抽象的 logData,它根据记录器的作业分配了不同的指针。
Filelogger 会像这样访问存储的文件句柄。
虽然这可以编译,但 SPLint 对此不满意并抱怨此消息:
转换为底层抽象类型FILE *
:(FILE *)(logger->logData)
我能做些什么来满足 SPLint?
- 我试着洒一些
/*@abstract@*/
,但没有帮助
C90 中是否有更好的方法来存储和访问数据,同时仍然保持结构签名以独立于其实现来传递类型?