LoginSignup
2
0

More than 5 years have passed since last update.

php-master-changes 2018-08-17

Last updated at Posted at 2018-08-18

出社する前までに出そうとすると、休日の扱いに困るということに気付くなど

2018-08-17

laruence: Fixed bug #76752 (Crash in ZEND_COALESCE_SPEC_TMP_HANDLER - assertion in _get_zval_ptr_tmp failed).

  • https://github.com/php/php-src/commit/fd463a9a6078074f8f648982b42bdd14423fb614
  • ?? と参照を使う一部コードが PHP7.3 でクラッシュする問題の修正
  • 元々 ZEND_COALESCE のオペコードハンドラが ZEND_COALESCE_SPEC_TMP_HANDLER と ZEND_COALESCE_SPEC_VAR_HANDLER で別に特化されていた
  • TMP と VAR の違いは参照を持てるかどうか
  • ZEND_COALESCE_SPEC_TMP_HANDLER に振り分けられたにもかかわらずオペランドが参照を持つケースがあった
  • ZEND_COALESCE_SPEC_TMPVAR_HANDLER で TMP/VAR を区別しない特化ハンドラを持つことで解決

laruence: Added a note

laruence: Fixed bug #76754 (parent private constant in extends class memory leak)

  • https://github.com/php/php-src/commit/04c4854fdfbc11b2b6a2cf1c8045f2efcd5dcdcc
  • 親クラスがプライベートな定数を持っていて、自身は定数を持っていないようなクラスを定義した際にメモリリークする問題の修正
  • zval にはクラスの定義情報を保持する zend_class_entry というのが入ってる奴があって、リクエスト終了時などそのクラス情報の破棄時に destroy_zend_class() がデストラクタとして呼ばれる
  • 各 zend_class_entry は自身の定数テーブルを持っている
  • 元コードでは destroy_zend_class() で定数テーブルに要素が見つかる場合のみ定数テーブルを破棄する作りだったのが、常に定数テーブルを破棄するよう修正された
  • 一方、バグ報告者の twose は、自身で別の修正を送ってもいて、あわせて見ると問題の正体がわかりやすい
    • この twose という人は swoole の中の人
  • 定数テーブルはクラス情報の初期生成時、データ構造の仮初期化のみが行われ、動的なメモリ領域の確保は実際に定数定義をそのクラスへ導入しようとするまで行われない
  • 継承で子クラスのクラス情報を生成する際、親クラスの定数テーブル内容を引き継いで子クラス用の定数テーブルを生成する
  • 現状実装はこのとき単に親クラスでの定数テーブルの個数を見て、あれば定数テーブルの枠(=動的なメモリ領域)の確保を行う、というもの
  • 本来は PHP7.1 で導入されたアクセス修飾子を見て、親の private な定数は数に含めない、という処理を行う必要がある
    • なお定数テーブルの枠は確保するものの、親クラスの定数テーブル内容を持ってくるデータ引き継ぎ処理の方はちゃんと private かどうかを見ているので、メモリリークはしても機能としては動いてた、という奴
  • この対応によって、このテストケースでは子クラスの定数定義数が 0 になり、動的なメモリ領域確保が行われず、解放も不要になるので、クラス情報の破棄処理は laurence の修正を入れる前の「要素が見つかる場合のみ定数テーブルを破棄」のままでよいということになる
  • 余分なメモリ確保を行わなくなる点では twose 案の方がよさそうな気がする

laruence: Update NEWS

laruence: Fixed bug #76755 (setcookie does not accept "double" type for expire time)

laruence: Micro optimization & fixed invalid key handling

laruence: Cheaper checking

laruence: Fixed same bug #76755 in setrawcookie

andrewnester: DOMDocument::formatOutput attribute sometimes ignored

laruence: Fixed build

weltling: Followup fix for ef9ed19e, see also bug #76738

weltling: Cleanup

cmb69: [ci skip] Update NEWS

weltling: Update binary SDK version for AppVeyor

weltling: Fix memory leak

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0