最近お世話になっている fluent-logger-phpで、travis-ciのHHVMのテストがコケるという話がありました。
原因を調べてみたら、ある条件でfwriteの戻り値がPHPとHHVMで異なるということを発見しました。
どんなバグか
<?php
$n = fwrite(fopen("php://memory", "r"), "hello");
var_dump($n);
これを実行すると、PHPではint(0)が返り、HHVMではint(5)が返ります。
まあこういうfwriteの呼び出し方は普通しないと思うので実害はあまりないかもしれませんが...
あるべき仕様は?
公式マニュアルを見ると
返り値 : fwrite() は、 書き込んだバイト数、またはエラー時に FALSE を返します。
と書かれています。
PHPがint(0)を返す挙動もバグなんじゃないのという気がしなくもないですが...
どうなんでしょうか。