naganaga34

Perl5.26のMTOS5.2.13でupdate.cgiが動かないエラー。

0

先日、使用しているコアサーバーが、システムのアップデートが行われ、MTOS 5.2.13にログインできなくなりました。

Got an error: Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/{{ <-- HERE support}}/?/

というエラーがでます。
Perlバージョンが「5.26」に変更になった為に、古いMTOSが対応できず起きたエラーの様です。
サーバ会社の案内どおり、lib/MT/App/CMS.pmの内容に変更して、ログインできるようになりました。

ここから本題です。
この後、MTOS 5.2.13にカスタムフィールド項目を追加するAnotherCustomFieldsにて新しいフィールドを追加する為、/EntryFields/config.yamlを変更し、サーバにファイルをアップロードしました。
直後MTOS側でアップデートが開始されるのですが、

Got an error: \C no longer supported in regex; marked by 
というエラーが表示されアップデートされなくなり、mt.cgiにアクセス、ログインすらできなくなりました。

恐らく、lib/MT/App/update.pm内で、Perl5.26に対応していない箇所があると思うのですが、Perlの知識がないので分かるのはここまでです。
どうする事もできなくなりました。

解決方法をご教授いただけたらとありがたく思います。
よろしくお願いします。

返信(4)

| 返信する
  • naganaga34さん

    下記ページに、同様事例での解決例が紹介されています。

    http://www.hirno.net/~wind/blog/2018/04/movabletypeperl-526.html

    当方の場合、かなり以前の確認で、かつローカル環境ではありますが、この情報を元に対象ファイルを修正したところ、元どおり動作するようになりました。一度お試しください。

  • >melodicantさん

    返信ありがとうございます。
    ご紹介いただいたページに書いてある対策は、施しております。

    その上で、upgrade.cgiが起動すると、


    Got an error: \C no longer supported in regex; marked by <-- HERE in m/(\ <-- HERE C)/

    というエラーが表示されアップデートされなくなり、mt.cgiにアクセス、ログインすらできなくなりました。
    恐らく、lib/MT/App/Upgrader.pm内で、Perl5.26に対応していない箇所があると思うのですが、分かりません。

  • >naganaga34さん
    参考になるか分かりませんが、下記のページではextlib/URI/Escape.pmを対処されているようです。
    http://www.webkoza.com/rooms/2019/02/fedora29mt522.html

    参考に、MT5.2.2のextlib/URI/Escape.pmと、最新版のMT7-R5202のextlib/URI/Escape.pmの原因と思われる箇所のコードを抜粋で掲載しておきます。

    MT5.2.2

    sub escape_char {
        return join '', @URI::Escape::escapes{$_[0] =~ /(\C)/g};
    }

    MT7-R5202

    # XXX FIXME escape_char is buggy as it assigns meaning to the string's storage format.
    sub escape_char {
        # Old versions of utf8::is_utf8() didn't properly handle magical vars (e.g. $1).
        # The following forces a fetch to occur beforehand.
        my $dummy = substr($_[0], 0, 0);
     
        if (utf8::is_utf8($_[0])) {
            my $s = shift;
            utf8::encode($s);
            unshift(@_, $s);
        }
     
        return join '', @URI::Escape::escapes{split //, $_[0]};
    }
    

    この関数だけ書き換えてOKになるるか等は未保証です。
    ただ、MT5.2.2のextlibとlib配下すべてをgrepしたところ、"\C"を使っているのは、URI/EScape.pmのescape_char()のみでしたので、この箇所が原因である可能性は高いです。

    なお、元のエラーの説明はPerl公式マニュアルに記載がありました。
    https://perldoc.jp/docs/perl/5.28.0/perldiag.pod#37s32is32more32clearly32written32simply32as32-37s32in32regex59-32marked32by32--32HERE32in32m47-37s47
    (「no longer supported in regex; marked by」でページ検索)

    MT7-R5202に含まれるEscape.pmは、マニュアルに書かれている対処を行っているようです。

  • >yujiroさん

    返信ありがとうございます。
    ご紹介いただいた対処を行いますので。問題なく動きました。
    現在、管理画面にログインできています。

    extlib/URI/Escape.pmの該当箇所を、そのまま入れ替えただけで動作しました。

    助かりました。
    ありがとうございます。

返信する


カテゴリグループ

106 23

最新のトピック: test (2019年5月29日 sato)

フォーラムカテゴリー

21 76

最新のトピック: 公開終了日の取り消し (2013年10月18日 gsk)

177 505

最新のトピック: Category (2022年1月16日 Mark)

413 1117

最新のトピック: edgeで制作時に保存が適用されない (2022年4月 1日 reddiamond)

OpenID対応しています OpenIDについて