Kentaro Ohkouchi

Results 247 comments of Kentaro Ohkouchi

リフレクションを使用して、 `Swift_Events_TransportChangeEvent` を除外してみましたが、 https://github.com/nanasess/ec-cube/commit/10c0dbd8ef44170b2b07811e7dcfe39fed339fe5 travis-ci で segmentation fault が発生してしまいます。 https://travis-ci.org/nanasess/ec-cube/builds/93914057 以下のように、 SwiftMailer 単体で試してみると問題なし。 ``` php class Swift_Smoke_LoggerSmokeTest extends SwiftMailerSmokeTestCase { public function testLogger() { $mailer = $this->_getMailer(); $logger = new...

> 実装してみましたが、 segmentation fault で落ちてしまう模様 ユニットテストで [Faker::realText()](https://github.com/fzaninotto/Faker/blob/538783934c25f1f353e43eeda0d7062fedcd8961/src/Faker/Provider/Text.php#L108) を使用しつつ、 [Monolog::TestHandler](https://github.com/Seldaek/monolog/blob/21dde4dedbbbefe3f8055ce5c1d4aaf8516d9ec6/src/Monolog/Handler/TestHandler.php#L136) を使用している箇所で segmentation fault が発生している模様です。 [Faker::realText()](https://github.com/fzaninotto/Faker/blob/538783934c25f1f353e43eeda0d7062fedcd8961/src/Faker/Provider/Text.php#L108) で `explode()` を使用して、大量の要素(26,000以上)の配列を生成し、 [Monolog::TestHandler](https://github.com/Seldaek/monolog/blob/21dde4dedbbbefe3f8055ce5c1d4aaf8516d9ec6/src/Monolog/Handler/TestHandler.php#L136) がメモリ上の何らかの配列の操作をする(バッファリングする?)ことで、 segmentation fault が発生しているものと思われます。 - ~~`Faker::realText()` を `Faker::text` に変更することで正常実行される~~ - ~~`Monolog::TestHandler` の処理は特殊なものではなく、実運用時に発生する可能性は少ないと考えられる~~...

stack trace を見てみましたが、現象としては、こちらが近いです。 https://bugs.php.net/bug.php?id=70007 https://bugs.php.net/bug.php?id=64827 循環参照が大量にできるとだめっぽい https://bugs.php.net/bug.php?id=63635

このデストラクタの `stop()` で、イベントハンドラがコールされると segmentation fault になるっぽいです https://github.com/swiftmailer/swiftmailer/blob/5.x/lib/classes/Swift/Transport/AbstractSmtpTransport.php#L494

いろいろ調べてみたところ、 大量の循環参照が生成された後の GC で segmentation fault になる模様です。 (gc_collect_cycle() の返り値が 6万を越えたあとに segfault になるのを確認しました) いくつかの複合要因が考えられますが、 DI コンテナである Pimple も、 Symfony も Doctrine も大量の循環参照を発生させており、更にそれらの内部で配列をコピーするようなロジックが引き金になっていると思われます。 ちなみに、 Pimple 2.1.0 では C の extension が用意されており、これらの対策をしているのではないかと思われます。(何故 C...

display_errors = on になっていれば、以下の PR にてエラーメッセージが表示されると思います https://github.com/EC-CUBE/ec-cube/pull/4093

@okazy プラグインのインストール時は composer API によって memory_limit を自動的に 1.5GB まで伸張するので、 memory_limit の設定は意味無いです

以下のE2Eテストを追加して検証しています。 https://github.com/nanasess/ec-cube/commit/4f7b5226b3a5228db11b80221342b3f4bc59c92a 本修正により、 `Eccube\Entity\Master` 配下の Entity に対して Schema Update が自動実行されないようです。 (手動で `bin/console doctrine:schema:update --force` を実行すれば、正常動作することは確認済み) https://github.com/nanasess/ec-cube/actions/runs/8532978876/job/23374978428#step:13:72

@tao-s url-fragment 攻撃の問題ないことを、OWASP Zap のテスト書いて確認したかったのですが、テストの構成が変わって難しくなってしまいましたね。。。 手動でテストするしかないか🤔