Skip to content

【プラグイン】BcSeoHelperEventListener のネストループで break が内側しか抜けていない #4355

@teratai3

Description

@teratai3

概要

BcSeoHelperEventListener::bcFormTableAfter() 内のネストした foreach ループにおいて、
break が内側のループしか抜けないため、マッチ後も外側のループが継続し、意味がないループが走り続ける問題が発生する。

baserCMS version : 5.2.3

事前準備

  • BcBlogをインストール
  • BcSeoをインストール

再現条件

  • 管理画面ブログ新規追加ページにアクセスする(/baser/admin/bc-blog/blog_posts/add/{site_id}
  • ページレンダリング時に BcFormTable.after イベントが発火し、bcFormTableAfter() が呼ばれる
  • SEO欄を追加すべきフォームか判定するため、以下のループが走る
foreach ($seoForms as $configType => $seoForm) {
    foreach ($seoForm['eventIds'] as $configEventId) {
        if ($eventId === $configEventId) {
            $type = $configType;
            break; // 内側のループしか抜けない
        }
    }
}

https://github.com/baserproject/basercms/blob/5.2.3/plugins/bc-seo/src/Event/BcSeoHelperEventListener.php#L82-L89

期待される対応

$eventId に一致する $configType が見つかった時点で、外側・内側の両方のループを終了する。

修正方法

breakbreak 2 に変更することで、両方のループを一度に抜けるように変更する

Metadata

Metadata

Assignees

No one assigned

    Labels

    Bugバグ

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions