Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPerKaigi 2024 - PHP 本体のバグを見つけたら適切に報告しよう

Go Kudo
March 11, 2024

PHPerKaigi 2024 - PHP 本体のバグを見つけたら適切に報告しよう

Go Kudo

March 11, 2024
Tweet

More Decks by Go Kudo

Other Decks in Technology

Transcript

  1. • 社会人 6 年目 • モバイルゲーム会社勤務 ◦ お仕事で PHP 利用中

    ▪ たまに php-src にコントリビュートしたり OSS 出したりも • 興味対象 ◦ PHP ◦ 自作キーボード ◦ 電子工作 自己紹介
  2. • 実行環境の情報 ◦ バージョン ◦ OS ◦ etc • 再現コード

    バグ報告に必要なもの 簡単なバグなら これだけで十分だが...
  3. Debian 系ならこれだけ 踏んだバグの部分に応じて 適宜ライブラリを追加 & 拡張を有効化 (PDO など) 最低限のビルドならそんなに難しくない $

    sudo apt-get update $ sudo apt-get install -y build-essential autoconf autotools-dev re2c bison git $ git clone https://github.com/php/php-src $ cd php-src $ ./buildconf --force $ ./configure --disable-all --disable-phpdbg --disable-cgi --disable-fpm --enable-cli --enable-debug $ make -j$(nproc) $ ./sapi/cli/php
  4. $ docker run --rm -it php:8.3.0-cli /bin/bash # php -r

    'var_dump(range(9.9, "0"));' Segmentation fault PHP 8.3.0 のバグを再現してみる
  5. # docker-php-source extract # cd /usr/src/php # ./configure --disable-all --enable-debug

    # make -j$(nproc) # ./sapi/cli/php -v PHP 8.3.0 (cli) (built: Mar 8 2024 12:56:02) (NTS DEBUG) Copyright (c) The PHP Group Zend Engine v4.3.0, Copyright (c) Zend Technologies # ./sapi/cli/php -r 'var_dump(range(9.9, "0"));' Segmentation fault そこからデバッグビルド版にする
  6. # apt-get update # apt-get install -y gdb # gdb

    --args ./sapi/cli/php -r 'var_dump(range(9.9, "0"));' (gdb) run Starting program: /usr/src/php/sapi/cli/php -r var_dump\(range\(9.9,\ \"0\"\)\)\; [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1". Program received signal SIGSEGV, Segmentation fault. zif_range (execute_data=0xfffff7a130f0, return_value=0xfffff7a13070) at /usr/src/php/ext/standard/array.c:2963 2963 unsigned char low = (unsigned char)Z_STRVAL_P(user_start)[0]; gdb を入れてスタックトレースを取る 原因の行まで 特定できた!
  7. 頑張るしかない... おすすめは canary 環境にデバッグビルドの PHP を 仕込んでおき流量をコントロール canary 環境は APM

    等入れていて遅くなっていることが多いので まだ許容できることが多い (はず) コアダンプ取りにくい問題