PostgreSQL 8.0.21 に関する技術情報

このリリースは 8.0.20 からの修正リリース(2009/03/16リリース)です。
本ドキュメントは PostgreSQL のリリースノートを基に作成しています。
8.0.x からのアップデートではダンプ、リストアは不要です。

しかし、8.0.6 より前のバージョンからアップグレードする場合は、実行バイナリファイルを差し替えるほかに操作が必要となるケースがありますので、8.0.6 に関する技術情報を参照してください。

本マイナーバージョンアップには、エンコーディング変換に関して、DoS 攻撃(サービス不能攻撃)を可能にするセキュリティ障害の修正を含んでいます。

PostgreSQL 8.0.20 から 8.0.21 への変更点

8.3.7,8.2.13、8.1.17、8.0.21、7.4.25 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。


  1. エンコーディング変換に失敗した時の再帰エラークラッシュを防ぐようになりました。(Tom)(8.3、8.2、8.1、8.0、7.4)

    エンコーディング変換関数で発生するすべてのエラーがエラー報告するとき、そのメッセージについて再びエンコーディング変換を必要として、無限に再帰される可能性があることが分かりました。

    直近の 2 つのマイナーリリースにて、関連する修正が行なわれています。これまでは特定ケースに対応した修正でしたが、本修正ではより包括的な修正がされています。再帰的なエラー報告を行なう状況になったとき、エンコーディング変換しない ASCII 形式のメッセージで報告するようになりました。

  2. 指定の変換関数に対してエンコーディングが誤っている場合、CREATE CONVERSION ができないようになりました。(Heikki) (8.3、8.2、8.1、8.0、7.4)

    これは、エンコーディング変換に失敗する可能性のある 1 つのシナリオを避けます。前の項目と同じ問題の別の防御策です。

  3. 必須の場合の除きパス式を変更せず、必要なとき適切に試行するように、xpath 関数が修正されました。(Andrew) (8.3)

    標準 SQLでは、xpath 関数 は文書フラグメントとなるデータにおいて動作しなければならないと示唆していますが、libxml はこれをサポートしておらず、Xpath 標準に従って動作しているかどうか不明です。
    xpath関数ではデータとパス表現の両方を変更することで不適合を回避しようとしていました。しかし、この変更に不具合があり、有効な検索が失敗する可能性がありました。

    xpath 関数は、整形式の XML 文書かどうか検査し、整形式の場合にデータやパス表現を変更せずに libxml を呼び出すようになりました。
    整形式でない場合には、失敗する可能性を少なくした別の変更方法が使用されます。

    新しい変更方法は完全ではありません。また、完全な解決はできないと考えられます。したがって本修正は、既存のアプリケーションが不必要に障害を起こさないようにするための応急処置と考えてください。

    PostgreSQL 8.4 では単純に、整形式の文書ではないデータに対する xpath の利用を拒絶するようになる予定です。

  4. to_char 数にデータ引数の型として不適切な書式コードが与えられたとき、コアダンプ出力されるのが修正されました。(Tom) (8.3、8.2、8.1、8.0、7.4)

    修正前バージョンでは、数値データに対して(特異な)日付時刻フォーマットを指定した場合に障害が報告されました。

  5. マルチバイトエンコーディングで Cロケールを使用したときにテキスト検索で失敗する可能性があり、修正されました。(Teodor) (8.3、8.2)

    wchar_t 型が int 型より小さいプラットフォーム(Windows が該当)でクラッシュする可能性がありました。

  6. 電子メールのような複数の「@」を含む文字列に対するテキスト検索の構文解析が極端に非効率であったものが、修正されました。(Heikki) (8.3、8.2)

    内部的に電子メールアドレスやホスト名などを区別してトークン切り出しを行ないます。その際に構文解析で再帰処理をしないようになっています。

  7. 大きなサブクエリの出力リストでの副 SELECT に関するプランナの問題が修正されました。(Tom) (8.3)

    この障害の既知の症状は、関係するデータ型に依存したエラー "failed to locate grouping columns" です。しかし、また他の問題があるかもしれません。

  8. 暗黙の強制による CASE WHEN の逆コンパイルを修正しました。(Tom) (8.3、8.2、8.1)

    ビューをダンプしたり定義の確認をしたりしようとするときに、アサートを有効にした(--enable-cassert)ビルドにおいてはアサート失敗することがありました。アサートが無効のビルドでも "unexpected CASE WHEN clause" エラーメッセージが発生することがあります。

  9. TOAST テーブルの行タイプの所有者を誤って割り当てる可能性が修正されました。(Tom)(8.3、8.2、8.1)

    CLUSTER または ALTER TABLE の書き換え構文がテーブル所有者以外のユーザにより実行された場合、テーブルの TOAST テーブル向けの pg_type エントリーが実行したユーザが所有するものとして記録されてしまいました。

    TOAST の行タイプに対する権限は通常のデータベース操作ではまったく検証されませんので、これによりすぐに問題が発生することはありません。しかし、後でコマンドを発行したロールを削除しようとした場合に予期せぬ失敗(8.1 または 8.2)や削除後に pg_dump が "owner of data type appears to be invalid" という警告が発生する(8.3)可能性がありました。

  10. 現在のセッションが1度も LISTEN コマンドを実行していないとき、UNLISTEN をただちに終了させるように変更されました。(Tom) (8.3)

    多くの場合、これは特に役に立つ最適化ではありませんが、DISCARD ALL が UNLISTEN を呼び出すので、以前のコードでは DISCARD ALL を多用したコネクションプーリングを行なうアプリケーションなどで、かなりの性能問題を引き起こしました。

  11. PL/pgSQLで INSERT 後の INTO を文字列の起点だけではなく、任意の位置における INTO変数句として扱わないように修正されました。CREATE RULE における INSERT INTO で失敗しないようになります。(Tom) (8.3、8.2)
  12. PL/pgSQLにてブロックの終わりでエラー状態変数を完全に消去するようになりました。(Ashesh Vashi、Dave Page) (8.3、8.2、8.1)

    これは、PL/pgSQL 自体の問題ではありませんが、関数の状態を調査している間に PL/pgSQL のデバッガをクラッシュさせることがありました。

  13. Windows で CallNamedPipeへの呼び出し失敗を再試行するようになりました。(Steve Marshall, Magnus) (8.3、8.2)

    この Windows API 関数は、一時的に失敗することが時々あるようです。これまでは重大なエラーとしてすべての失敗を扱っていましたが、LISTEN、NOTIFY やその他の操作が混乱する可能性がありました。

  14. 既知のタイムゾーン省略形のデフォルトリストに MUST(モーリシャス島夏時間)が追加されました。(Xavier Bugaud) (8.3、8.2、8.1、8.0、7.4)