perl5222delta - perl v5.22.2 での変更点
この文書は 5.22.1 リリースと 5.22.2 リリースの変更点を記述しています。
5.22.0 のような以前のリリースから更新する場合は、まず 5.22.0 と 5.22.1 の違いについて記述している perl5221delta を読んでください。
これは CVE-2015-8608 です。 さらなる情報については [perl #126755] を 参照してください。
canonpath()
これは CVE-2015-8607 です。 さらなる情報については [perl #126862] を 参照してください。
mkstemp(3)
5.22.0 から、perl は mkstemp(3)
を呼び出す前に umask を 0600
に設定し、 後で復元するようになりました。 これにより、所有者の読み込みと書き込みのビットだけを残したいという意図とは 逆に、間違って open(2)
に、与えられたモードを適用する前に、 これらのビットを取り除くように伝えていました。
(古いバージョンの glibc のように) mkstemp(3)
でモード 0666
を使う システムはパーミッション 0066
でファイルを作ります; これにより現在の umask に関わらず誰でも読み書きできるパーミッションのままになります。
これは代わりに umask 0177
を使うことによって修正されました。
crypt()
で未初期化メモリにアクセスしないように短いソルトやソルトの中の不正な文字の検出処理が追加されました。
environ
から重複した環境変数を削除する以前は、一つの環境変数が environ[]
に複数回現れると、 %ENV|perlvar/%ENV
はその名前の最後のエントリを保持していました; 一方 典型的なgetenv()
は最初のエントリを保持します。 %ENV
は getenv()
が返すものと同じものを保持するようになりました。
次に、environ[]
から重複を取り除くようになったので、その名前の設定が %ENV
で設定された場合、安全でない値が子プロセスに渡らないようになりました。
これは CVE-2016-2381 です。
故意に、5.22.1 から互換性がなくなるようにした変更はありません。 もし 5.22.1 との互換性がなければ、それはバグですので、報告をお願いします。 以下の "Reporting Bugs" を参照してください。
File::Spec はバージョン 3.56 から 3.56_01 に更新されました。
canonpath()
は汚染状況を保存するようになりました。 "Fix loss of taint in canonpath()
" を参照してください。
Module::CoreList はバージョン 5.20151213 から 5.20160410 に更新されました。
Perl 5.18.4 での Digest::SHA のバージョン番号が間違っていたので 修正されました。 5.18.3 と 5.18.4 での Config のバージョン番号も同様です。 [perl #127624]
ファイルハンドルを暗黙に閉じたときに怒ることがある警告 "unable to close filehandle %s properly: %s" の説明がが拡張、改良されました。
hex()|perlfunc/hex
の文章は、有効な入力を明確化するために見直されました。
Dtrace ビルドは、.d ファイルのプローブが使っている入力オブジェクト ファイルが要求するよりも新しい dtrace を持つシステムでビルドに 成功するようになりました。
以前はプローブに失敗して、ビルドが失敗していました。
Configure はもはやデフォルトでは libnm をプローブしなくなりました。 元々はこれは "New Math" ライブラリでしたが、この名前は GNOME NetworkManager によって再利用されました。
Configure は gcc 5 について知るようになりました。
-DPERL_MEM_LOG 付きでの perl のコンパイルが再び動作するようになりました。
Darwin での -Dusecbacktrace 付きでの perl のコンパイルが再び 動作するようになりました。
-DDEBUGGING
とスレッドの両方を有効にしたビルドは、OS X の Terminal で ビルドやテストをすると "panic: free from wrong pool" で失敗します。 これは、perl 内部の環境管理が、環境を更新するために libc の setenv()
関数を 使う atfork ハンドラと競合するからです。
Perl は OS X の環境の更新に setenv()
/unsetenv()
を使うようになりました。
ppc64el (リトルエンディアン PowerPC の Debian での呼び名) の浮動小数点形式は 正しく検出されるようになりました。
t/porting/extrefs.t でのテスト失敗が修正されました。
Perl_newATTRSUB_x()
での保証されないアサートが取り除かれました。 プロトタイプ付きのスタブサブルーチン定義がある場合、属性を持つ同じ サブルーチンのスタブ(または定義)が引き続くと、ヌルポインタによるアサート失敗が 発生していました。
import()
や unimport()
メソッドが見つからないときに内部で使われる &PL_sv_yes
プレースホルダの呼び出しは、正しくスカラコンテキストを 扱えるようになりました。 [perl #126042]
pipe()|perlfunc/pipe
演算子は DEBUGGING
ビルドのとき、正しいエラーメッセージを 出力せずにアサートを起こすことがありました。 アサートされる条件はアサートなしで正しく検出および報告されるので、 アサートは削除されました。 [perl #126480]
場合によっては、ヒヤドキュメントのパースの失敗時に解放されたメモリを 使おうとすることがありました。 これはポインタが正しく復元されないために起きていました。 [perl #126443]
演算子が想定される場所に配列があったときにより多くの情報を報告し、 アサート失敗を避けるようになりました。 [perl #123737]
他の演算子のパース中にヒヤドキュメントが見つかり、パーサが既にファイルの 末尾まで読み込んでいて、ヒヤドキュメントが終端していないとき、perl は アサートしたりセグメンテーションフォルトしたりすることがありました。 終端していないヒヤドキュメントに関するエラーを確実に出力するようになりました。 [perl #125540]
ファイル名なしの #line
指示子を処理するときにバッファの末尾を越えて パースしなくなりました。 [perl #127334]
Perl 5.22.0 では C99 の 16 進浮動小数点記法対応が追加されましたが、時々 16 進小数を間違ってパースしていました。 これは修正されました。 [perl #127183]
否定の大かっこ文字クラスの中に反転 POSIX クラスがあり、何か他にオプションで マッチングするような特定の正規表現パターンは、 間違ってマッチングに失敗することがありました。 失敗を引き起こすものの例は qr/_?[^\Wbar]\x{100}/
です。 これは修正されました。 [perl #127537]
pack "H"
(および pack "h"
) が、非 utf8 のソースと utf8 の ターゲットを与えられたとき、ソースの先頭より前を読むことがあるという pack()|perlfunc/pack
の問題が修正されました。 [perl #126325]
セグメンテーションフォルトや C レベルのアサートで perl が異常終了する いくつかのケースが修正されました。 [perl #126193] [perl #126257] [perl #126258] [perl #126405] [perl #126602] [perl #127773] [perl #127786]
darwin で $ENV{foo}
を設定するときのメモリリークが修正されました。 [perl #126240]
文字クラスが終端していないけれども末尾に逆スラッシュがあるパターンを コンパイルしようとしたときに正しくエラーを発生させるようになりました。 [perl #126141]
make_trie()
で NOTHING
regops と EXACTFU_SS
regops を正しく 扱うようになりました。 [perl #126206]
使うために必要なもの全てがある場合にだけ、semctl()
を テストするようになりました。 FreeBSD では semctl()
エントリポイントは存在するかもしれませんが、 ポリシーにより無効になっているかもしれません。 [perl #127533]
strict が指定されているにも関わらずハッシュキーとして未定義の裸の単語が 許されるという退行が修正されました。 [perl #126981]
(Perl 5.20.0 から導入された) 最適化として、uc()
, lc()
, ucfirst()
, lcfirst()
は時々修正したコピーではなくその場で 引数を変更します。 この最適化の基準がより厳密になりました; その場で変更するべきではない場合に 間違ってその場で変更してしまうことを防ぐためです; これは List::Util などの 一部の場合で発生していました。
非 ASCII 文字が関係する一部の正規表現のコンパイルに使用されるメモリが 減らされました。 より完全な修正は来るべき Perl 5.24.0 で行われます。
Perl 5.22.2 は、Perl 5.22.1 以降、24 人の作者によって、 110 のファイルに約 3,000 行の変更を加えて、 約 5 ヶ月開発されてきました。
自動生成ファイル、文書、リリースツールを除くと、52 の .pm, .t, .c, .h ファイルに約 1,500 行の変更を加えました。
Perl は、活気のあるユーザーと開発者のコミュニティのおかげで 20 年を超えて 繁栄しています。 以下の人々が、Perl 5.22.2 になるための改良に貢献したことが分かっています:
Aaron Crane, Abigail, Andreas König, Aristotle Pagaltzis, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari Mannsåker, David Golden, David Mitchell, H.Merijn Brand, James E Keenan, Jarkko Hietaniemi, Karen Etheridge, Karl Williamson, Matthew Horsfall, Niko Tyni, Ricardo Signes, Sawyer X, Stevan Little, Steve Hay, Todd Rinaldo, Tony Cook, Vladimir Timofeev, Yves Orton.
これはバージョンコントロール履歴から自動的に生成しているので、ほぼ確実に 不完全です。 特に、Perl バグトラッカーに問題を報告をしてくれた (とてもありがたい)貢献者の 名前を含んでいません。
このバージョンに含まれている変更の多くは、Perl コアに含まれている CPAN モジュール由来のものです。 私たちは Perl の発展を助けている CPAN コミュニティ全体に感謝します。
全ての Perl の歴史的な貢献者のより完全な一覧については、どうか Perl ソース 配布に含まれている AUTHORS を参照してください。
もしバグと思われるものを見つけたら、comp.lang.perl.misc ニュースグループに 最近投稿された記事や https://rt.perl.org/ にある perl バグ データベースを確認してください。 Perl ホームページ、http://www.perl.org/ にも情報があります。
もしまだ報告されていないバグだと確信したら、そのリリースに含まれている perlbug プログラムを実行してください。 バグの再現スクリプトを十分小さく、しかし有効なコードに切りつめることを 意識してください。 バグレポートは perl -V
の出力と一緒に perlbug@perl.org に送られ Perl porting チームによって解析されます。
もし報告しようとしているバグがセキュリティに関するもので、公開されている メーリングリストに送るのが不適切なものなら、 perl5-security-report@perl.org に送ってください。 このアドレスは、問題の影響を評価し、解決法を見つけ、Perl が対応している 全てのプラットフォームで問題を軽減または解決するパッチをリリースするのを 助けることが出来る、全てのコアコミッタが参加している非公開の メーリングリストになっています。 このアドレスは、独自に CPAN で配布されているモジュールではなく、 Perl コアのセキュリティ問題だけに使ってください。
変更点の完全な詳細を見る方法については Changes ファイル。
Perl のビルド方法については INSTALL ファイル。
一般的なことについては README ファイル。
著作権情報については Artistic 及び Copying ファイル。