Ошибка при запуске checksetup.pl Bugzilla 5.0.6 Установка: введенное вами регулярное выражение '^ [^,] + {' недопустимо - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь установить Bugzilla на машину Windows 10, используя это руководство:

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

Apache 2.4, Perl 5.28 .2 и MySQL 8.0 установлены и работают. Я установил все необходимые модули Perl, используя команду 'install-modules.pl --all'. Я могу открыть страницу 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-го раунда я все еще получаю ту же ошибку.

Я попытался найти выражение, и оно, похоже, не имеет смысла. Я не знаком с регулярными выражениями, поэтому не знаю, где go решить эту проблему. Любая помощь в запуске этой системы приветствуется.

1 Ответ

3 голосов
/ 24 января 2020

Похоже, что MySQL больше не позволяет использовать неэкранированный { для соответствия {.

Это, вероятно, произошло, когда MySQL начал использовать новую библиотеку регулярных выражений с лучшей поддержкой Unicode в версии 8.0.4.

В Bugzilla/Install/DB.pm заменить

"'^[^,]+{'"

на

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

Я отправил тикет .


Для тех, кому интересно, почему так много слэшей:

$dbh->sql_regexp ожидает, что его второй аргумент будет SQL, который генерирует MySQL шаблон регулярного выражения.

  1. Строковый литерал Perl "'\\\\{" создает строку '\\{'.
  2. Строка '\\{' используется как SQL код.
  3. Код SQL '\\{' создает строку \{.
  4. Строка \{ используется в качестве шаблона регулярного выражения.
  5. Шаблон регулярного выражения \{ соответствует {.
...