プロジェクト

全般

プロフィール

Bug(バグ) #3486

未完了

sfValidatorBase::isEmptyにfalseが渡された場合にtrueにならない

誠二 天重 さんが約11年前に追加. ほぼ5年前に更新.

ステータス:
New(新規)
優先度:
Normal(通常)
担当者:
-
対象バージョン:
開始日:
2013-11-15
期日:
進捗率:

0%

予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

概要

sfValidatorBase::isEmpty() に false が渡された場合に true にならない。

例えば opValidatorStirng では requried オプションが指定された場合には以下の箇所を通る。

    if ($this->isEmpty($clean))
    {
      if ($this->options['required'])
      {
        throw new sfValidatorError($this, 'required');
      }

      return $this->getEmptyValue();
    }

上記のコード中の $clean に対して false が渡された場合,if分岐がtrue判定されないため,この分岐自体が無視され,requriedオプションを指定していても例外が投げられない。

上記の問題は,具体的には以下のようなコードがあった場合に問題となる。

public function executeHoge(sfWebRequest $request)
{
  $validator = new opValidatorString(array('required' => true));
  $validator->clean($request['hoge']);
}

上記のコードでパラメータとして hoge をもっていない(hogeの値がnullやfalseだということではなくhogeがセットされていない)場合, $request['hoge'] には false が入っているため,opValidatorString が例外を投げない。
上記のコードを$request->getParameter('hoge')と変更すると,この場合には null が渡されるため例外が throw される。

他の形式にエクスポート: Atom PDF