在 16.04 上,当 LANG 设置为 .UTF-8 时,gawk 会因复杂的正则表达式而崩溃

在 16.04 上,当 LANG 设置为 .UTF-8 时,gawk 会因复杂的正则表达式而崩溃

LANG当环境变量设置为例如时,以下命令将在我的系统上崩溃en_US.UTF-8,但可以正常工作LANG=C

/usr/bin/gawk '
  BEGIN {
    match(str, /^([^\1-\71\73-\100\133-\136\140\173-\177]|(([\302-\337][\200-\277])|(\340[\240-\277][\200-\277])|([\341-\354\356\357][\200-\277][\200-\277])|(\355[\200-\237][\200-\277])|(\360[\220-\277][\200-\277][\200-\277])|([\361-\363][\200-\277][\200-\277][\200-\277])|(\364[\200-\217][\200-\277][\200-\277])))([^\1-\54\57\73-\100\133-\136\140\173-\177]|(([\302-\337][\200-\277])|(\340[\240-\277][\200-\277])|([\341-\354\356\357][\200-\277][\200-\277])|(\355[\200-\237][\200-\277])|(\360[\220-\277][\200-\277][\200-\277])|([\361-\363][\200-\277][\200-\277][\200-\277])|(\364[\200-\217][\200-\277][\200-\277])))*/) }'

错误输出是

gawk: cmd. line:3: fatal error: internal error: segfault

查看核心转储,崩溃发生在为 AWK 语言生成的 yacc 解析器中(具体来说,在 yacc regexp libdfacomp()例程中)。例如,在 Debian 8.6 或我测试过的其他 Linux 上不会发生这种情况。

这是一个已知问题吗?询问是因为这个问题可能是我的系统从 15.10 升级而来的。

相关内容