如何使用带有 git 补丁的 flawfinder

How to use flawfinder with a git patch

我想对我的合并请求使用 flawfinder,从而只分析发生变化的代码。我看到 flawfinder 支持补丁,所以我认为它真的很容易。

问题是:我无法使用 git 补丁。 Flawfinder 确实识别出它是一个 git 补丁,它确实只扫描需要的文件,但没有命中。如果我 运行 没有补丁参数的 flawfinder 并检查已更改文件的命中,我确实在添加的新行中看到了一些命中。 我尝试了与 svn 的差异:工作起来很有魅力。完全没有差异:相同。与 git 不同:无法使其工作。

如果有人有想法,我很乐意采纳。或者举个例子。

重现的快速命令:

git diff --patch --output PATCH
flawfinder --patch PATCH <dir>

我得到了输出:

Examining <dir>/<file.c>
                                     
FINAL RESULTS:                       
                                     
                                     
ANALYSIS SUMMARY:                    
                                     
No hits found.                       

对于那些感兴趣的人:这确实是一个问题,因为 git diff 格式与统一 diff / svn diff 格式略有不同。

diff --git a/file.c b/file.c
index 19651c89a3..c119389931 100644                                             
--- a/file.c
+++ b/file.c
@@ -5017,6 +5017,15 @@ static void foo()                         

svn / unified diff 在最后一个 @@ 之后没有函数名。 这是 flawfinder.py 中使用的正则表达式:

 diff_hunk = re.compile(r'^@@ -\d+(,\d+)?\s+\+(?P<linenumber>\d+)[, ].*@@$')

只需删除正则表达式中的 $ 就足以使其适用于 git。