防撞正则表达式?

时间:2012-12-05 08:48:55

标签: c++ c regex crash

我一直在几个服务器中使用标准UNIX版本的regex,这些服务器必须非常适应错误。多年来,我发现了一些情况,其中用户输入了格式错误的正则表达式,或者目标字符串中的一些奇怪的字符导致了分段违规等,从而导致服务器崩溃。对于我们的系统,这是不可接受的。

在这些格式不正确的模式或匹配字符串中是否存在正则表达式的版本只会导致错误而不会导致服务器崩溃?

由于这些代码在检查这些模式时大多是多线程的,所以我不想使用setjmp longjmp等。

1 个答案:

答案 0 :(得分:2)

Google最初为Go语言开发了C ++正则表达式库RE2,但是现在有大多数脚本语言的包装器,如Perl,Python,它声称:

  

RE2使用自动机理论来保证正则表达式搜索   以输入的大小线性运行。 RE2实现内存   限制,以便搜索可以约束到固定的数量   记忆。 RE2被设计为使用小型固定C ++堆栈   无论它必须处理什么输入或正则表达式;因此RE2是   在线程堆栈无法增长的多线程环境中很有用   任意大。

所以,似乎选择任何三个:快速,可靠,小。