问题标签 [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.

0 投票
2 回答
5698 浏览

linux - 如何在使用夹板工具检查源代码时包含头文件?

我创建了 2 个 C 程序源代码文件和一个仅包含函数声明的头文件。

我的模式.h

pattern_main.c

模式搜索.c

在 linux 上使用夹板工具检查此代码时,

我收到以下错误:

我怎样才能使它正确?

0 投票
2 回答
2158 浏览

gcc - 夹板与 gcc:外部静态代码分析工具值得为 C 代码库付出努力吗?

我正在做一个相当复杂的项目,作为一个额外的复杂性,它是一个内核 Linux 模块。在这样的代码库上运行像夹板这样的 linting 工具当然不是不可能的 [1],但是微不足道的努力还不足以让事情顺利进行。

在我投入更多时间之前,我希望能就这个问题获得一些反馈和意见。有了足够多的标志,gcc 会进行大量检查。在实践中使用单独的静态代码分析工具是否仍然值得?

[1] http://www.cs.virginia.edu/pipermail/splint-discuss/2005-January/000531.html

0 投票
1 回答
373 浏览

c - 夹板边界检查的奇怪行为

有夹板专家吗??我正在尝试使用夹板静态分析我在 C 中拥有的大型项目。我看到过多的边界检查错误显然不是边界错误。我编写了一个小测试程序来尝试隔离问题,并在对代码运行夹板时注意到一些非常奇怪的警告。我有3个不同的例子。这是第一个:

当我按预期使用时,arr[3]分配会生成一个警告+bounds,但当我使用+likely-bounds. +likely-bounds甚至做什么?它似乎不起作用。第二个例子:

在此示例中,夹板抱怨我正在读取数组边界之外的内容(“A memory read references memory超出了分配的存储空间。”)var = arr[i]尽管我显然不是。这应该是一个警告,因为数组中的值没有初始化,但这不是我得到的警告。初始化数组中的最后一个值将清除错误(但初始化第一个或第二个不会)。难道我做错了什么?在第三个例子中:

生成警告arr[3] = 0,但不生成警告var = arr[i],即使循环显然超出了数组的边界。看起来写入数组末尾会扩展夹板认为数组的大小。这怎么可能?

简而言之,我的问题是:

  1. 可能边界标志有什么作用?
  2. 有什么方法可以让夹板给我与越界有关的合法错误?
  3. 有什么方法可以使夹板不会增加访问超出其界限的数组的大小?目前,夹板报告了 750 多个警告,我没有时间一一验证每个警告。
0 投票
1 回答
507 浏览

parse-error - /usr/include/arpa/inet.h:35:27:夹板中的解析错误

在用夹板检查我的代码时,我遇到了一个问题。起初我在 POSIXLIB 上遇到错误。所以我用 +posixlib 运行夹板如下,

但我收到以下错误:

夹板 3.1.1 --- 2004 年 6 月 15 日

如何解决此错误?

0 投票
1 回答
762 浏览

c - 什么是夹板中的“新鲜存储”?

我在 Splint 文档中搜索了“新鲜存储”,并发现了它的提及,但没有正式的定义。我理解并正在使用其他修饰符,例如 null 或 only。我只是不确定什么是新存储。

情况是这样的:

这是一个家庭作业,但这个问题不必直接与家庭作业有关。这是一个夹板问题。

0 投票
0 回答
334 浏览

c - 立即地址传输不一致 SPLINT

我在这里有一个代码段,但 SPLINT 在这里给了我一个警告

我正在尝试解决此问题,请任何人都可以通过一些了解。我已经在谷歌上搜索了 3 个小时,还没有找到解决方案。

0 投票
1 回答
1086 浏览

c - 夹板:在 for 循环中解析错误

我使用夹板作为 c99 代码的静态分析器。

Splint 似乎不太符合 c99 标准。因此我应用了这个补丁: http ://www.cs.virginia.edu/pipermail/splint-discuss/attachments/20080718/52cc25f6/attachment.obj

现在,由于声明不在顶部,我没有收到任何解析错误。

但是,如果我在 for 语句中放入变量声明,我仍然会在 for 循环中遇到解析错误。例如:

一种解决方法是这样写:

但由于我不想调整我所有的 for 循环,我想知道是否有可用的补丁来解决这个问题。

0 投票
1 回答
682 浏览

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 完成污点分析。

谢谢

0 投票
3 回答
2644 浏览

c - C的污点分析

我需要对我的 C 程序执行静态污点分析。我尝试使用夹板,没有运气。是否有任何其他开源或免费软件工具可用于执行污点分析?

如果是,您能否也提及使用它的方式或参考任何链接。感谢你的帮助。谢谢

0 投票
1 回答
78 浏览

c89 - C90 转换为底层抽象类型

依赖于日志相关函数的日志结构如下所示:

在这个日志记录函数中,有一个抽象的 logData,它根据记录器的作业分配了不同的指针。

Filelogger 会像这样访问存储的文件句柄。

虽然这可以编译,但 SPLint 对此不满意并抱怨此消息:

转换为底层抽象类型FILE *(FILE *)(logger->logData)

我能做些什么来满足 SPLint?

  • 我试着洒一些/*@abstract@*/,但没有帮助

C90 中是否有更好的方法来存储和访问数据,同时仍然保持结构签名以独立于其实现来传递类型?