Semgrep 允许您 specify types在你的模式中,但是如果我碰巧有两个不同的类,它们具有相同的简单类型,但具有不同的完全限定名称,那么在编写我只想针对其中一种类型的规则时,如何消除两者之间的歧义?
我将通过示例解释我的问题。假设您有两个不同的库,它们都具有相同的类名 Foo
。
在我自己的代码的一个文件中,我导入一个库,并使用 Foo 类:
import lib1.* // has Foo class
f = Foo()
f.bar()
在我自己的代码的另一个文件中,我导入另一个库并使用它的 Foo 类:
import lib2.* // has different Foo class
f2 = Foo()
f2.baz()
在我的 Semgrep 规则中,我想从 lib1 中检测 Foo 类型的内容。
pattern: (Foo $F)
由于我的模式对导入一无所知,它是否只返回两个文件的结果?
最佳答案
是的,由于您的模式仅指定类型 Foo
,Semgrep 将返回 f1
和 f2
作为匹配项。如果您只想匹配其中之一,您可以指定要匹配的类型的完全限定名称:
pattern: (lib1.Foo $F)
关于semgrep - Semgrep 如何处理两个冲突的类型化元变量类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72624591/