強引にaction名がマルチバイトなURLにアクセス⇒500エラー

routing.ymlはデフォルトのままで、

http://hostname/mymodule/%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92

とかに無理やりアクセスすると変なエラーがでます。

No suitable nodes are available to serve your request.(500エラー)

とか

Fatal error: Maximum function nesting level of '100' reached, aborting!
in /usr/share/php/symfony/debug/sfWebDebug.class.php on line 89

とか・・・


調べてみると、action名がマルチバイトという異常系のときに、action_name が空にされた状態のままaction実行まで流れてきてて、sfActions->execute() が再帰的に実行されている現象が確認できました。

500エラーでもいいような気がするのですが、該当するactionが無いということでの404にしたかったので、filterをつくって404を出力するようにしました。

<?php
/**
 * action名が変な場合404にするfilter
 *
 * @package    yoshihi6
 * @subpackage contents-lib
 * @author     yoshihi6
 * @version    SVN: $Id: $
 */
    
class validateActionNameFilter extends sfFilter
{
    public function execute( $filter_chain )
    {
        // get the context
        $context    = $this->getContext();

        // get the current action information
        $moduleName = $context->getModuleName();
        $actionName = $context->getActionName();
        
        if( $actionName === '' ){
            throw new sfError404Exception();
        }else{
            $filter_chain->execute();
        }
    }
}

クラス命名があまりよろしくないかも・・・考えておきます。