リリース日: 2020-11-12
このリリースは13.0に対し、様々な不具合を修正したものです。 13メジャーリリースにおける新機能については、E.2を参照してください。
13.Xからの移行ではダンプ/リストアは不要です。
インデックス式とマテリアライズドビューの問い合わせの中でのDECLARE CURSOR ... WITH HOLD
と遅延トリガの発動を防止しました。
(Noah Misch)
これは本質的に「セキュリティ制限された操作」のサンドボックス機構の抜け穴です。 テンポラリでないSQLオブジェクトの作成権限を持つ攻撃者は、任意のSQLコードをスーパーユーザとして実行するように抜け穴を拡大できました。
PostgreSQLプロジェクトは本問題を報告してくれたEtienne Stalmansに感謝します。 (CVE-2020-25695)
pg_dump、pg_restore、clusterdb、reindexdb、および、vacuumdbにおける、複雑な接続文字列のパラメータの使用方法を修正しました。 (Tom Lane)
pg_dumpとpg_restoreの-d
パラメータや、列記した他のプログラムの--maintenance-db
パラメータは、単一のデータベース名ではなく複数の接続パラメータを含む「接続文字列」とすることができます。
並列処理や複数データベースの処理など、これらのプログラムが追加の接続を初期化する必要がある場合、この接続文字列は無視されて、追加接続には基本の接続パラメータ(データベース名、ホスト、ポート、ユーザ名)だけが使われました。
接続文字列にデフォルトでないSSLやGSSのパラメータなど他に何らか重要な情報が含まれている場合に、この動作は接続失敗をもたらす可能性がありました。
さらに悪いことには、接続は成功するけれども意図通りに暗号化されなかったり、意図した接続パラメータが防ぐはずだった中間者攻撃に脆弱になったりするかもしれませんでした。
(CVE-2020-25694)
psqlの\connect
コマンドが接続パラメータを再利用するとき、以前の接続文字列から上書きされていないパラメータが確実に再利用されるようにしました。
(Tom Lane)
これにより、デフォルトでないSSLやGSSのオプションなど、関連するパラメータの脱落により再接続に失敗するかもしれないケースを回避します。 さらに悪いことに、再接続は成功したけれども意図通りに暗号化されなかったり、意図した接続パラメータで防ぐはずの中間者攻撃に脆弱になったりするかもしれませんでした。 ユーザが意図的に一部の接続パラメータを上書きするのでpsqlの振る舞いはより複雑ですが、これは前述のpg_dump等に対するものと大筋で同じ問題です。 (CVE-2020-25694)
psqlの\gset
コマンドが特別扱いされる変数を書き換えるのを防止しました。
(Noah Misch)
接頭辞を伴わない\gset
はサーバが示した変数を何であれ上書きします。
したがって、安全でないサーバがPROMPT1
などの特別扱いされる変数を設定して、ユーザのセッションで任意シェルコードを実行できるようにする可能性がありました。
PostgreSQLプロジェクトは本問題を報告してくれたNick Cleatonに感謝します。 (CVE-2020-25696)
レプリケーションプロトコルの意図せぬ破壊を修正しました。 (Álvaro Herrera)
walsenderはSTART_REPLICATION
に対するコマンド完了イベントを2つ報告しました。
これはドキュメント記載されておらず、明らかに意図せぬものです。
それで、私たちは最近の13.0の変更が二重イベントを削除したことを知らせていませんでした。
しかしながら、walreceiverが一部のコードパスで余分なイベントを必要とすることが判明しました。
最も現実的な修正は、余分なイベントをプロトコルの一部と決定し、余分なイベント発生を復活させることです。
チェックポイント時にSLRUディレクトリが適切にfsyncされるようにしました。 (Thomas Munro)
これはオペレーティングシステムのクラッシュ後に起こりうるデータ損失を防止します。
BYPASSRLS
属性を持ったユーザに対するALTER ROLE
を修正しました。
(Tom Lane, Stephen Frost)
BYPASSRLS
属性はスーパーユーザのみ変更することができますが、
パスワード変更などの他のALTER ROLE
操作は通常のパーミッション検査に基づき可能とすべきです。
これまでのコードでは誤って、このようなロールへの全ての変更をスーパーユーザからのみに制限していました。
子テーブルがあるときにALTER TABLE ONLY ... DROP EXPRESSION
を禁止しました。
(Peter Eisentraut)
現在の実装ではこの場合について正しく扱うことができないため、当面は単にこれを禁止します。
ALTER TABLE ONLY ... ENABLE/DISABLE TRIGGER
が子テーブルに再帰しないようにしました。
(Álvaro Herrera)
これまではONLY
フラグが無視されていました。
LOCK TABLE
が自己参照ビューで動作するようにしました。
(Tom Lane)
これまでは無限再帰を問題とするエラーを投げていましたが、この場合を禁止する必要はないと思われます。
REINDEX CONCURRENTLY
を経てもインデックスに関する統計情報を維持するようにしました。
(Michael Paquier, Fabrízio de Royes Mello)
同時実行でないインデックス再作成では既にこのような統計情報を維持するようになっていました。
REINDEX CONCURRENTLY
からの誤った進行報告を修正しました。
(Matthias van de Meent, Michael Paquier)
ルールや更新可能ビューを通して依存する列が更新されたときに、GENERATED
列が確実に更新されるようにしました。
(Tom Lane)
この修正は、このような場合において起こりうる列指定トリガの発動失敗にも対処しています。
照合順序に依存したパーティション境界の式でのエラーを修正しました。 (Tom Lane)
テキスト配列のハッシュ化に対応しました。 (Peter Eisentraut)
配列要素型が照合順序を適用できる場合に配列のハッシュ作成に失敗していました。 特に、これはテキスト配列の列をパーティションキーとしたハッシュパーティショニングの使用を妨げました。
異なる型の間で日付時刻を比較する際の内部オーバーフローを防止しました。 (Nikita Glukhov, Alexander Korotkov, Tom Lane)
これまでは、dateがtimestampとして有効な範囲より過去の場合、dateとtimestampとの比較はエラーになりました。 また、関連した稀な場合として、タイムゾーンのローテーションに際して限界値に近いtimestamp値のオーバーフローもありました。
to_date()
とto_timestamp()
でのマイナス年からBC日付への一つ違いの変換を修正しました。
(Dar Alathar-Yemen, Tom Lane)
また、マイナス年と明示的な「BC」マークとの組み合わせに対して、打ち消してADを生成するように調整しました。
jsonpath
の.datetime()
メソッドがISO 8601形式のタイムスタンプを受け入れできるようにしました。
(Nikita Glukhov)
これはSQLで要求されていることではありませんが、to_json()
関数がJavascriptの互換性のために、このタイムスタンプ形式を生成することから適切と考えられます。
archive_mode
がalways
に設定されているとき、スタンバイサーバがWALタイムラインヒストリファイルを確実にアーカイブするようにしました。
(Grigory Smolkin, Fujii Masao)
この見落としにより、その後のPITRリカバリの試みが失敗する可能性がありました。
kqueue()
を使うプラットフォームにて早すぎるpostmasterダウンの検出での境界ケースを修正しました。
(Thomas Munro)
ソートキーが揮発的な式であるときの誤ったインクリメンタルソートのプランの生成を回避しました。 (James Coleman)
GEQOのプラン作成時にパーティション同士の結合を検討したときに起こりうるクラッシュを修正しました。 (Tom Lane)
TOASTの圧縮の展開で起こりうる無限ループまたは壊れた出力データを修正しました。 (Tom Lane)
クリーンアップだけをするVACUUM
のときのBツリーインデックスで項目数のカウントを修正しました。
(Peter Geoghegan)
データがBRINインデックスに挿入される前に確実にTOASTから戻すようにしました。 (Tomas Vondra)
インデックスのエントリに行外のTOASTポインタを含むことはサポートされませんが、BRINはこれを考慮していませんでした。
これにより、「missing chunk number 0 for toast value NNN(TOAST値NNNのためのチャンク番号0がありません)」のようなエラーが生じる可能性がありました。
(既存のインデックスでこのようなエラーに遭遇したなら、修正するのにREINDEX
を行えばよいです。)
インデックスが付加された列を持つときに動作するように、バッファ付きGiSTインデックスの構築を修正しました。 (Pavel Borisov)
pg_hba_file_rules
ビューでgetnameinfo()
の移植性に欠ける使用法を修正しました。
(Tom Lane)
FreeBSD 11では、あるいは他のプラットフォームでも、このビューのaddress
とnetmask
列はこの誤りのために常にnullでした。
パラレルワーカを開始するときにdebug_query_string
がNULLである場合のクラッシュを回避しました。
(Noah Misch)
BEFORE ROW UPDATE
トリガが、削除されたか「見つからない」列を持つテーブルの「old」行を返すときの失敗を回避しました。
(Amit Langote, Tom Lane)
この更新を抑制する方法は、「見つからない」列がNULLとして読まれることで、クラッシュや予期せぬCHECK
制約エラー、あるいは、誤ったRETURNING
出力をもたらす可能性がありました。
(ある列が定数ですが非NULLのデフォルト値でALTER TABLE ADD COLUMN
にて追加された場合、その列は「見つからない」ものとなります。)
削除された列も同様に問題を引き起こすおそれがありました。
インクリメンタルソートの計画に対するEXPLAIN
の出力を、XML出力モードで正しい入れ子のタグを持つように修正しました。
(Daniel Gustafsson)
共有メモリのキューを通して非常に大きな内容を転送するときの不要なエラーを回避しました。 (Markus Wanner)
SQL言語関数でいくつかの場合における結果データ型の強制の欠落を修正しました。 (Tom Lane)
関わるデータ型によっては、これにより誤った結果やクラッシュをもたらす可能性がありました。
JITコード生成でのテンプレート関数属性の誤った扱いを修正しました。 (Andres Freund)
これはs390x
でクラッシュを引き起こすことが示されていて、他のプラットフォームでも他の問題がある可能性があります。
PPCでcompare_exchangeとfetch_addの操作についてコード生成を改善しました。 (Noah Misch)
RLSポリシーに関してリレーションキャッシュのメモリリークを修正しました。 (Tom Lane)
index_get_partition()
で境界条件的な場合のメモリリークを修正しました。
(Justin Pryzby)
SIGHUP処理が新たなGUC変数値は再起動なしには適用できないと判断するときの小さなメモリリークを修正しました。 (Tom Lane)
PL/pgsqlのCALL
処理でメモリリークを修正しました。
(Pavel Stehule, Tom Lane)
Windowsのlibpqで、プロセスごとに一度WSAStartup()
を呼び出し、WSACleanup()
は全く呼び出さないようにしました。
(Tom Lane, Alexander Lakhin)
これまでは、libpqは接続開始時にWSAStartup()
を呼び出し、接続をクリーンアップするときにWSACleanup()
を呼び出していました。
しかしながら、WSACleanup()
の呼び出しは他のプログラムの操作と干渉する可能性があることがわかりました。
特にstdoutへの期待された出力に稀に失敗することが観測されています。
この呼び出しを省略しても悪影響はないとみられるため、そのようにしました。
(これはプログラムがデータベース接続を連続して行うときのDLLロードとアンロードの繰り返しによる性能問題も取り除きます。)
Windowsでのecpgライブラリのスレッドごとの初期化ロジックを修正しました。 (Tom Lane, Alexander Lakhin)
マルチスレッド化されたecpgアプリケーションは、誤ったロックにより稀に誤動作を起こす可能性がありました。
ecpgのB'...'
およびX'...'
リテラルに対する誤った処理を修正しました。
(Shenhao Wang)
Windowsで、psqlがバッククォートコマンドの出力をバイナリモードでなくテキストモードで読むようにしました。 (Tom Lane)
これにより改行を適切に扱えます。
pg_dumpが拡張の設定テーブルの列ごとの情報を確実に収集するようにしました。 (Fabrízio de Royes Mello, Tom Lane)
これに失敗することで、--inserts
を指定したときにクラッシュしたり、COPY
を使用してテーブルのデータを再ロードするときに、(通常は正しいのですが)不十分な指定のCOPY
コマンドになったりしました。
pg_upgradeが対象クラスタにテーブルスペースディレクトリが既に存在するかを検査するようにしました。 (Bruce Momjian)
contrib/pgcrypto
の潜在的なメモリリークを修正しました。
(Michael Paquier)
contrib/pgcrypto
での起こりそうにない失敗ケースに対する検査を追加しました。
(Daniel Gustafsson)
最近に追加されたtimetz
のテストケースを修正して、アメリカが夏時間を守っていないときにも動作するようにしました。
(Tom Lane)
タイムゾーンデータファイルをtzdata release 2020dに更新しました。フィジー、モロッコ、パレスチナ、カナダのユーコン、マッコーリー島、ケーシー基地(南極)の夏時間法の変更と、フランス、ハンガリー、モナコ、パレスチナの歴史的修正が含まれます。
タイムゾーンライブラリのコピーをIANA tzcode release 2020dに同期しました。 (Tom Lane)
これはアップストリームのzicのデフォルト出力オプションの「fat」から「slim」への変更を吸収します。
V13より前のブランチでは引き続き「fat」モードを選択するため、これは単に見た目を整えるためのものです。
この変更はstrftime()
が、それが失敗しない限り、errno
を変更しないことも保証します。