首页 > 解决方案 > 运行 checksetup.pl 时出错 Bugzilla 5.0.6 安装:您提供的正则表达式 '^[^,]+{' 无效

问题描述

我正在尝试使用本指南在 Windows 10 机器上安装 Bugzilla:

https://bugzilla.readthedocs.io/en/latest/installing/windows.html#

Apache 2.4、Perl 5.28.2 和 MySQL 8.0 已安装并运行。我已经使用“install-modules.pl --all”命令安装了所有必需的 Perl 模块。我可以打开 Bugzilla 页面,尽管它是纯文本版本。

问题是最后一次运行 checksetup.pl。它检查所有已安装的模块,然后给我这个:

Removing existing compiled templates...
Precompiling templates...done.
Initializing "Dependency Tree Changes" email_setting ...
Initializing "Product/Component Changes" email_setting ...
Use of uninitialized value in numeric eq (==) at Bugzilla/Install/DB.pm line 2688.
The regular expression you provided '^[^,]+{' is not valid. The error
was: Syntax error in regular expression on line 1, character 7..

我在 DB.pm 文件中找到了正则表达式sub _add_password_salt_separator。(第 4110 行)

这是似乎是问题孩子的代码块:

  my $profiles
    = $dbh->selectall_arrayref(
        "SELECT userid, cryptpassword FROM profiles WHERE ("
      . $dbh->sql_regexp("cryptpassword", "'^[^,]+{'")
      . ")");

我尝试重新加载 Bugzilla 以查看它是否只是下载或配置的问题,但在第 3 轮之后,我仍然收到相同的错误。

我尝试查找表达式,它似乎没有任何意义。我不熟悉正则表达式,所以我不知道该去哪里解决这个问题。任何帮助使该系统运行表示赞赏。

标签: regexperlbugzilla

解决方案


似乎 MySQL 不再允许使用未转义{来匹配{.

这可能发生在 MySQL 在版本 8.0.4 中开始使用具有更好 Unicode 支持的新正则表达式库时。

Bugzilla/Install/DB.pm,替换

"'^[^,]+{'"

"'^[^,]+\\\\{'"

我提交了一张票


对于那些好奇为什么有这么多斜线的人:

$dbh->sql_regexp期望它的第二个参数是生成 MySQL 正则表达式模式的 SQL。

  1. Perl 字符串文字 "'\\\\{"产生字符串'\\{'
  2. 该字符串'\\{'用作 SQL 代码。
  3. SQL 代码'\\{'生成字符串\{
  4. 该字符串\{用作正则表达式模式。
  5. 正则表达式模式\{匹配 a {

推荐阅读