php-master-changes 2018-12-27

今日は出力バッファ周りの最適化、ext/zlib の pkg-config 移行、ext/pcre のバグ修正、ext/sockets の Mac でのバグ修正、ドキュメントの更新、array_key_exists() 最適化用の専用オペコード ZEND_ARRAY_KEY_EXISTS の実装、ext/opcache の static メソッド呼び出し時の可視性チェック修正、ext/spl のバグ修正があった！

# 2018-12-27
## dstogov: Reduce agressive inlining
- https://github.com/php/php-src/commit/df850bf2d2c16798e9877aaf36780493fbf47c82
- 出力バッファ周りのインライン化を抑制
- ちょっと理由分からないけど、ローカリティ上げ気味にしてキャッシュに載せる方が速くなるとかだろうか？
- 現状コードで NULL 渡る可能性ない部分で不要な分岐を減らしてもいるもよう

## nikic: Migrate ext/zlib to use pkg-config
- https://github.com/php/php-src/commit/e595f5cd8a4a00ca04e36ba1e78f14805dbecead
- ext/zlib のビルドで、pkg-config を使うよう修正

## nikic: Fixed bug [#77338](https://bugs.php.net/bug.php?id=77338)
- https://github.com/php/php-src/commit/b1deb98c42328488cfce61d49d9607ed44fff7a4
- [7.3~]
- ext/pcre で、php_pcre_get_compiled_regex(_ex) 内で preg_options を 0 にするよう修正
- [24 日の修正](https://qiita.com/sj-i/items/bbc6f2b9268c38d6bf3e#nikic-fix-invalid-efree-in-browscap) の続き
- ここで書き込んだ値が [pcre2_match()](https://www.pcre.org/current/doc/html/pcre2_match.html) の引数に使われるが、実際のところ必要ないし、pce->preg_options が渡ると意図せぬ挙動になってしまう
- 何でこんなコードになってるのかな経緯までは追ってない

## nikic: Remove preg_options param from pcre_get_compiled_regex()
- https://github.com/php/php-src/commit/27e9c05e8108fe6c184178997176896fb91a3451
- ↑について、master の pcre_get_compiled_regex() ではそもそも preg_options を渡さないようにした
- 7.3 でできないのは互換性の問題か

## mmeyer724: Initialize s_un (sockaddr_un) to zero before using it. Fixes [#76839](https://bugs.php.net/bug.php?id=76839).
- https://github.com/php/php-src/commit/3c42c784c23ff242f1737e25410bb05ce22ecd37
- [7.2~]
- ext/sockets で、Mac だと socket_recvfrom() が末尾にゴミデータの付いた無効な from を返す問題の修正
- バッファの初期化問題みたい

## weltling: Update NEWS [ci skip]
- https://github.com/php/php-src/commit/b53d2b69f2cdede102228d2107bdcaf9165f023a
- [7.2~]
- ↑の NEWS への追記

## weltling: Update NEWS [ci skip]
- https://github.com/php/php-src/commit/d2621c318553bc589961edaa7f1dd666c1b3b178
- [7.3~]
- [昨日の修正](https://qiita.com/sj-i/items/a705a1b9d651ac84c9f1#weltling-fixed-bug-77317-dir-file-realpath-reveal-physical-path-for-subst-virtual-drive)の NEWS への追記

## Majkl578: Implement ZEND_ARRAY_KEY_EXISTS opcode to speed up array_key_exists()
- https://github.com/php/php-src/commit/f5044a12ddb6f79d59f72c9c12a6cad36d5f6492
- [array_key_exists()](http://php.net/manual/ja/function.array-key-exists.php) の高速化用に専用オペコード ZEND_ARRAY_KEY_EXISTS を追加
- [#76148](https://bugs.php.net/bug.php?id=76148) でリクエストがあったもの
- [PR:3360](https://github.com/php/php-src/pull/3360) は結構前から出ていた

## nikic: Add SCCP support for ZEND_ARRAY_KEY_EXISTS
- https://github.com/php/php-src/commit/0bbfebb6d9c8868248c6068e50a300e8a38e8b2f
- ext/opcache で、ZEND_ARRAY_KEY_EXISTS の SCCP サポートを追加
- コンパイル時に実行してしまえるケースが出て繰り返し実行に強くなる場合がある、みたいな
- SCCP については[前に](https://qiita.com/sj-i/items/434ec169e51991572d30#nikic-fixed-bug-77092)超ざっくりの説明書いた

## dstogov: Fixed ext/spl/tests/bug61347.phpt failure introduced by ZEND_ARRAY_KEY_EXISTS opcode
- https://github.com/php/php-src/commit/70fcbe3524653e23893d616d2102af681f6aa20a
- ZEND_ARRAY_KEY_EXISTS 導入で出たテストこけの修正

## nikic: Add performance improvement section to UPGRADING
- https://github.com/php/php-src/commit/f1c0e671e988b9bf679bd21dbf6dab9adc1e1b4e
- UPGRADING へ ZEND_ARRAY_KEY_EXISTS での性能向上について追記

## dstogov: Tune ARRAY_KEY_EXISTS opcode handler for speed and code size
- https://github.com/php/php-src/commit/e8daada82ef62a9f8bbd834114911f477da4ab63
- ZEND_ARRAY_KEY_EXISTS を最適化、コードサイズを減らしつつ速度を稼ぐ

## dstogov: Respect static method visibility
- https://github.com/php/php-src/commit/9bf80ef3852814150f0721f2ecbe6ca8d57975f2
- ext/opcache で、static メソッドの呼び出しで可視性チェックをすっ飛ばしてた部分を修正

## Metabolix: Fix [#77359](https://bugs.php.net/bug.php?id=77359): spl_autoload causes segfault
- https://github.com/php/php-src/commit/89bf3df67d0f0ba3090b273d1b1b9fba9514a62d
- [7.3~]
- ext/spl で、spl_autoload() でクラス名を全小文字にする際、元から全小文字だった場合に use-after-free になって SEGV を引き起こす問題の修正
- 元から全小文字だと参照カウントを増やすだけでアロケーションしないけれど、解放処理は参照カウント無視、みたいな
- 参照カウントをちゃんとチェックするよう zend_string_free() を zend_string_release() に修正

## Metabolix: Fix [#77360](https://bugs.php.net/bug.php?id=77360): class_uses causes segfault
- https://github.com/php/php-src/commit/16c62a81795c253724a957d32e242545bb05253d
- [7.3~]
- ext/spl で、class_parents()、class_implements()、class_uses() が SEGV を引き起こす問題の修正
- ↑のと同じ流れで同じ修正