2012-02-27このリリースは8.4.10に対し、各種の不具合を修正したものです。8.4メジャーリリースにおける新機能については項E.58を参照してください。バージョン8.4.11への移行8.4.Xからの移行ではダンプ/リストアは不要です。8.4.10より前のバージョンからアップグレードする場合には8.4.10のリリースノートを参照してください。TRIGGERにおいてトリガ関数に対する実行権限が必要になりました。Haas)この検査が無かったため、別のユーザが自身が所有するテーブルにその関数をインストールすることで、偽造した入力データでトリガ関数を実行することができました。DEFINERが付いたトリガ関数でのみ重大です。その他のトリガ関数ではとにかくテーブル所有者として実行されるためです。(CVE-2012-0866)SSL証明書内のコモンネームにおける独断的な長さ制限を取り除きました。Linnakangas)libpqとサーバの両方ともSSL証明書から取り出したコモンネームを32バイトで切り詰めていました。通常想定外の検証エラー以上のことを引き起こしませんが、ある証明書の所有者が他者になりすますことができるという、多少怪しいシナリオがあります。被害を受けるにはコモンネームが正確に32バイト長でなければならず、また、攻撃者は信頼されたCAに対してコモンネームが接頭辞としてその文字列を持つ証明書を発行するように説得しなければなりません。サーバになりすますには、さらにクライアントからの接続を中継するための攻撃が必要です。(CVE-2012-0867)pg_dumpのコメントに記述された名前の中の改行を空白に変換します。Haas)pg_dumpは、その出力スクリプトにおけるSQLコメント内で発行されるオブジェクト名のサニタイズに関して注意を払っていませんでした。改行を含む名前は少なくともそのスクリプトを構文的に不正にさせます。悪意をもって組み立てられたオブジェクト名によって、スクリプトがリロードする時にSQLインジェクションの危険性があり得ました。(CVE-2012-0868)バキューム処理と同時に挿入を行った場合のbtreeインデックス破損を修正しました。Lane)挿入によって発生するインデックスページ分割によって、同時実行中のVACUUMが削除すべきインデックス項目を削除し損なうことが時々発生することがありました。..."など)、最悪は、解放されたテーブル位置に再挿入された関係がない行にちなんだ、警告のない間違った問い合わせ結果が引き起こされます。この不具合は8.2から存在していましたが、あまり頻発に発生しませんでしたので、これまで究明されませんでした。使用中のデータベースで発生していたのではと疑わしければ、対象のインデックスを再インデックス付けすることで修正されます。テーブル所有者を変更する時に、テーブル単位の権限だけではなく列単位の権限も更新します。Lane)この失敗は、事前に付与された列権限が古い所有者により付与されたものとして表示されることを意味します。新しい所有者またはスーパーユーザであってもテーブル所有者を追跡できなくなった権限を取り除くことができないことを意味します。SETにおける一部の設定で存在しない値を許可します。Linakangas)default_text_search_config、default_tablespace、temp_tablespacesを未知の名前に設定することができます。これらが実際に使用されている別のデータベースでは既知であるかもしれませんし、またテーブル空間の場合はまだテーブル空間が作成されていないかもしれないからです。過去search_pathにおいても同じ問題がありましたが、これらの設定も同様に動作するようにしました。コミット後のテーブルファイルの削除に問題があった場合のクラッシュを防止します。Lane)テーブル削除は、そのトランザクションがコミットした後にのみ背後のディスク上のファイルを削除しなければなりません。(例えばファイルの権限の誤設定のため)失敗した場合、トランザクションをアボートするには遅すぎますので、コードは単に警告メッセージを出力し継続するものと考えられます。リリース8.4においてこのロジックが壊れ、こうした状況でPANICが発生し、再起動できないデータベースとなりました。WAL再生中にOIDカウンタを、たとえ周回していたとしても、正しく追跡します。Lane)これまでは、OIDカウンタはシステムが再生モードを抜けるまで高値のままになりました。実際にはほとんどnilという結果になりますが、マスタに昇格されるスタンバイサーバでは、値が必要になってから、OIDカウンタを合理的な値まで進めるために長時間かかる可能性がありました。*が付いた正規表現の後方参照を修正しました。Lane)コードでは、正確な文字列一致を強制せずに、実質後方参照シンボルで参照されるパターン副式を満たす任意の文字列を受け付けました。同様の問題はまだ、直接量指定子のサブジェクトとならない、より大きく量化された式に埋め込まれた後方参照でも残っています。こちらは将来のリリースのPostgreSQLで対応予定です。inet/cidr値の処理に最近入ったメモリリークを修正しました。Linnakangas)2011年12月のPostgreSQLリリース内のパッチによって、これらの操作にメモリリークが発生しました。これらの列に対するbtreeインデックス等で重大な問題になる可能性がありました。INTOの後に対応先がなくなったポインタを修正しました。Lane)ほとんどの場合、これはアサートが有効な構築におけるアサーション失敗という結果になるだけですが、もっと悪い結果になる可能性がありました。Windowsのsysloggerにおけるファイルハンドルの二重クローズを防ぎます。(MauMau)通常はこのエラーは表面化しませんが、Windowsのデバッグ版を実行している場合は例外が引き起こります。plpgsqlにおけるI/O変換関連のメモリリークを修正しました。Lane)現在の関数が終わるまで、特定の操作がメモリリークしました。継承されたテーブル列に対するpg_dumpの取り扱いを改良しました。Lane)pg_dumpは、子の列が親の列と異なるデフォルト式を持つという状況を間違って扱いました。デフォルトがテキストとして親のデフォルトと同一であるが、実際は同一ではない場合(例えば、スキーマ検索パスの違いのため)、異なるものとして認識せず、そのため、ダンプしリストアした後、子は親のデフォルトを継承することができました。NULLであり親がそうではなかった場合も、微妙に間違ってリストアされました。INSERT形式のテーブルデータに対するpg_restoreの直接データベースにリストアするモードを修正しました。Lane)他の問題に対する修正における見落としの結果、2011年9月または12月付けのリリースに含まれるpg_restoreでは、--insertsまたは--column-insertsオプションを付けて作成されたアーカイブファイルを直接データベースにリストアすることができませんでした。アーカイブファイル自体には失敗はなく、テキストモード出力では問題ありませんでした。ecpgのDEALLOCATE文においてATオプションを可能にしました。Meskes)これをサポートする基盤は少し前から存在しましたが、見落としのため、エラー検査でこの状況を拒絶していました。int[]演算子のエラーを修正しました。Lelarge)2つの入力配列が共通して持つ最小の整数が1であり、どちらかの配列により小さな値があった場合、1が結果から間違って省かれました。contrib/pgcryptoのencrypt_iv()およびdecrypt_iv()の誤判定を修正しました。Kreen)これらの関数は特定の種類の無効入力エラーの通知に失敗し、不正な入力に対してランダムなゴミの値を代わりに返しました。contrib/test_parserにおける1バイトのバッファオーバーランを修正しました。Guyot)コードでは必要より1バイト多く読み取ろうとし、境界条件ではクラッシュします。contrib/test_parserは単なるサンプルコードであり、これ自体はセキュリティ問題ではありませんが、例のコードとしては良くありません。ARMにおいて可能ならばスピンロックに__sync_lock_test_and_set()を使用します。Pitt)この関数は、以前の廃止予定でARMv6以降では使用できなくなったSWPB命令の使用を置き換えるものです。最近のARMボードでも古いコードは明白な方法で失敗することはありませんが、単に同時アクセスのインターロックを行わず、マルチプロセス操作において奇妙な失敗をもたらすと報告されています。受け付け可能なバージョンのgccを用いて構築する場合に-fexcess-precision=standardオプションを使用します。Dunstan)最近のバージョンのgccは独創的な結果を生成するというさまざまなシナリオを防ぎます。FreeBSDにおいてスレッド化されたPythonを使用できるようにしました。Rees)configureスクリプトはこれまで、この組み合わせは動作しないと前提していました。FreeBSDではこの問題が修正されましたので、エラー検査を取り除きました。リリース8.4.10。