Vac*_*ano 21 c# string pex escaping pex-and-moles
我正在玩Pex,它传递给我的方法的参数之一是"\0".
那是什么意思?我的猜测是""基于我的方法内容的空字符串().但是,如果它是相同的,为什么不只是使用""而不是"\0"?
有人知道这是什么吗?
Ran*_*pho 39
'\ 0'是" 空字符 ".它用于终止C和C++的某些部分的字符串.Pex正在测试你的代码如何处理null字符,可能正在寻找Poison Null Byte安全漏洞.
大多数C#代码都没有什么可担心的; 但是,如果将字符串传递给非托管代码,则可能会出现问题.
编辑:
只是为了明确...... Pex传递一个包含空字符的字符串.这不是空引用.
它是一个包含字符'\ 0'的字符串.C#不会以任何特别的方式对待它 - 它只是unicode字符U + 0000.如果你写:
int firstCodePoint = text[0];
Run Code Online (Sandbox Code Playgroud)
然后你会发现firstCodePoint是0.
它是一个带有空字符的字符串。较旧的字符串库(如在 C 或较旧的 C++ 库中使用的库)使用 '\0' 字符来指示字符串的结尾。
.Net 等较新的环境使用不同的系统,但有很多关于以 '\0' 结束字符串的历史,因此它是一个常见的错误点。像 Pex 这样的测试库将使用它来确保您的程序正确处理它。