我正在使用WinPcap库并设置了所有本机方法调用。在构建时,我收到CA2101: Specify marshaling for P/Invoke string arguments代码分析警告。我的extern
函数定义如下:
[DllImport("wpcap", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
internal static extern int pcap_compile(IntPtr /* pcap_t* */ adaptHandle,
IntPtr /*bpf_program **/fp,
string /*char * */str,
int optimize,
uint netmask);
如果我将CharSet
更改为CharSet.Unicode
,我会解决代码分析警告,但我的功能不再有效。如何解决警告并保持代码正常工作?
答案 0 :(得分:9)
出现此警告是因为将Unicode文本截断为ASCII字符串可能会导致安全问题。
如果您不能使用Unicode字符串,请在属性上设置BestFitMapping = false, ThrowOnUnmappableChar = true
以防止出现此安全问题。
有关详细信息,请参阅documentation。