Semgrep允许您在模式中使用指定类型,但是如果我碰巧有两个不同的类,具有相同的简单类型,但具有不同的完全限定名,那么在编写只针对其中一个类型的规则时,如何消除两者之间的歧义呢?
我会通过例子来解释我的问题。假设您有两个不同的库,它们都具有相同的类名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)因为我的模式对导入一无所知,所以它只是返回两个文件的结果吗?
发布于 2022-06-15 00:04:50
是的,由于您的模式只指定了Foo类型,Semgrep将返回f1和f2作为匹配。如果只想匹配其中之一,则可以指定要匹配的类型的完全限定名称:
pattern: (lib1.Foo $F)https://stackoverflow.com/questions/72624591
复制相似问题