本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーはcharsbarこと石垣憲一さんで,
Perl 5.26リリース
去る2017年5月30日にPerl 5.
Perl 5はかれこれ20年以上も同じメジャーバージョンを使い続けていることからも察せられるように,
Perl 5.
本稿では,@INC
からカレントディレクトリが削除された経緯とその対策を説明し,
- 注1)
- Perl 5本体の開発チーム内の意見調整や,
リリースマネージャーなどを担当するリーダー役です。 - 注2)
- Perl 5は,
2010年にリリースされたPerl 5. 12以降, 修正の多寡によらず, 毎年春に偶数のマイナーバージョンを持つ安定版をリリースすることになっています (マイナーバージョンが奇数の開発版は, 安定版リリース前のコードフリーズの時期を除いて毎月リリースされます)。今回リリースされたPerl 5. 26. 0は, 2016年5月にリリースされたPerl 5. 25. 0から2017年4月にリリースされたPerl 5. 25. 12までの修正内容をまとめたものです。
@INCからカレントディレクトリが削除
Perlはバージョン3の時代である1990年から,@INC
の末尾に,jcode.
というライブラリがよく利用されましたが,jcode.
というファイルを設置するだけで期待したとおりに動作したのは,@INC
の末尾にカレントディレクトリが含まれていたからです。
# ほかの場所にインストールされていなければ
# CGIスクリプトと同じディレクトリにある
# jcode.plを読み込む
require "jcode.pl";
Perl 5.@INC
から.
が削除されました。上のコードはそのままではもう期待どおりの動作はしません
- 注3)
jcode.
はPerl 5.pl 22で非互換になった機能を利用しているため, そもそもそのままではPerl 5. 26では動作しません。
何が問題だったのか
UNIX系OSの世界,
読み込んだ時点でなにがしかのコードが実行されてしまうという点では,
Rubyの対応とPerlの初期の反応
そのため,$:
)
Perlの世界でも,@INC
からカレントディレクトリを削除する提案がされていたほか,
CVE-2016-1238とPerlの対応
この議論は2016年4月にまたも蒸し返されるのですが,
対策を取れば既存のモジュールやアプリケーションが壊れることはこれまでの議論からもわかっていたので,
公式にはCVE-2016-1238というIDで識別されるこの脆弱性に関する議論は1年近く続きました。その詳細は割愛しますが,@INC
からカレントディレクトリが削られました。コアモジュールのうち特によく使われるものについては,do
関数については,