概要
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 が見つかった時点で、外側・内側の両方のループを終了する。
修正方法
break を break 2 に変更することで、両方のループを一度に抜けるように変更する
概要
BcSeoHelperEventListener::bcFormTableAfter()内のネストしたforeachループにおいて、breakが内側のループしか抜けないため、マッチ後も外側のループが継続し、意味がないループが走り続ける問題が発生する。baserCMS version : 5.2.3
事前準備
再現条件
/baser/admin/bc-blog/blog_posts/add/{site_id})BcFormTable.afterイベントが発火し、bcFormTableAfter()が呼ばれるhttps://github.com/baserproject/basercms/blob/5.2.3/plugins/bc-seo/src/Event/BcSeoHelperEventListener.php#L82-L89
期待される対応
$eventIdに一致する$configTypeが見つかった時点で、外側・内側の両方のループを終了する。修正方法
breakをbreak 2に変更することで、両方のループを一度に抜けるように変更する