Smarty側に特に手を入れずにQuercus上で動かしたった

前回話しに上げた変更の

  • property_existsの内部でissetFieldを使わせない
  • getFieldでnullの時に次の候補(staticとか__get)とかに行かせずにnullを返す

と言うものでまず最初の爆死がなくなり、次はnullオブジェクトに対してisTrustedTagを呼ぼうとして死、と言う部分だったがこの部分はissetを追っていった所null判定が単純に間違っていた事が分かった。

 

issetの中でもプロパティに対して行うものはissetFieldを呼ぶが、ここで比較しているnullが単純なNullValue.NULLとの!=になっていた。

isTrustedTagの件は実際に比較先はVarで、実際の値がNullValueであるため、比較した結果非nullと言う扱いになって関数を呼びだそうとし、死と言う流れになっていた。

 

Value型はeqと言う関数で比較するようになっているように見えるのと、PHPのissetに関しては値がnullの場合はfalseなはずなので、eqを使うほうが正しい。

この部分を試しに書き換えた所、Smarty側には何も手を入れず、簡単なテンプレートをエラー無く表示することができた。

 

Quercusって修正を送りたい場合どーすると良いんだろう。

 

今回Quercusの中身を見をみた感想としてはかなり統一感があって見やすい&探しやすいコードになっているように思えた。

githubでPull Request募集したら結構協力者いると思うんだけどなあ。

仕様だってPHPの完全互換を目指す部分は揉めないだろうし。