リリース日: 2019-06-20
このリリースは11.3に対し、様々な不具合を修正したものです。 11メジャーリリースにおける新機能については、E.5を参照してください。
SCRAM検証のパース処理でバッファオーバーフローの危険があり、修正しました。 (Jonathan Katz, Heikki Linnakangas, Michael Paquier)
認証されたユーザ誰でも自身のパスワードを意図的に作りこんだ値に変更することでスタックに基づくバッファオーバーフローを起こすことができました。 PostgreSQLサーバをクラッシュさせることができることに加え、PostgreSQLのOSアカウントで任意コード実行をされる可能性があります。
同様のオーバーフローの危険がlibpqにあり、これにより悪意のサーバがクライアントをクラッシュさせたり、また、おそらくはクライアントのOSアカウントで任意コード実行させたりすることができました。
PostgreSQLプロジェクトは本問題を報告してくれたAlexander Lakhinに感謝します。(CVE-2019-10164)
実行時パーティション除外のロジックにおける様々なエラーを修正しました。 (Tom Lane, Amit Langote, David Rowley)
これらの間違いは、除外に使われる比較値が動的に決定された場合や除外の判断に複数のレンジパーティション列が関わる場合、(immutableではない)stableの比較演算子を伴う場合に、パーティションテーブルへの問い合わせで誤った応答をもたらす可能性がありました。
新たなパーティションにトリガ定義を複製しようとするときに起こりうるクラッシュを修正しました。 (Tom Lane)
テーブルが部分排他制約を持つときのALTER TABLE ... ALTER COLUMN TYPE
の失敗を修正しました。
(Tom Lane)
ドメインの制約へのコメントでのCOMMENT
コマンドの失敗を修正しました。
(Daniel Gustafsson, Michael Paquier)
ハッシュ集約のハッシュキーリストに重複した列があるときに起こりうるメモリ上書きを防止しました。 (Andrew Gierth)
ゼロ個あるいは複数個の引数を伴う集約の部分集約のときに不正な引数のNULL検査を修正しました。 (David Rowley, Kyotaro Horiguchi, Andres Freund)
マージアペンドプランの不完全な生成を修正しました。 (Tom Lane)
この間違いは「could not find pathkey item to sort(整列するpathkey要素が見つかりません)」エラーをもたらす可能性がありました。
重複した結合名をもつ問い合わせの不正な出力を修正しました。 (Philip Dubé)
この誤りは、このような問い合わせを含むビューに対するダンプ/リストアの失敗をひき起こします。
json_to_record()
とjson_populate_record()
でのJSON文字列リテラルのJSON型出力列への変換を修正しました。
(Tom Lane)
このような場合は単独JSON値としてリテラルを生成すべきですが、リテラルがエスケープを要する文字を含んでいる場合に誤動作しました。
正規表現で{1,1}
量指定子の誤った最適化を修正しました。
(Tom Lane)
このような量指定子は何もしない命令として扱われ、最適化で除かれました。
しかし、ドキュメントは欲張り(最長マッチ)、あるいは、非欲張りの変数{1,1}?
の場合には非欲張り(最短マッチ)を付加される部分式で強制すると明記していて、これが動作しませんでした。
この誤動作は部分式に取り込みの括弧か後方参照が含まれる場合のみ発生します。
ページ分割中にINCLUDEされた列の処理するときにエラーが起きるという稀な場合に、無効な空のBtreeインデックスページを書き込むのを回避しました。 (Peter Geoghegan)
無効なページは通常のインデックス操作に影響しないと思われますが、続くVACUUMで失敗をひき起こすかもしれません。 この動作がインデックスの一つに発生していたなら、インデックスを再構築することで復旧してください。
新たなプロセスのpg_stat_activity
データを初期化するときに起こりうる失敗を回避しました。
(Tom Lane)
SSL証明書から展開された文字列をデータベースエンコーディングに変換するような失敗する可能性のある操作は、クリティカルセクションの内側で実行されていました。
そこでの失敗は共有のpg_stat_activity
データへのアクセス手順を妨げるために結果としてデータベース全体のハングアップになると考えられます。
既存の共有メモリセグメントが衝突するpostmasterから未だ使われているかを確認する検査で、競合状態を修正しました。 (Tom Lane)
walreceiverのシグナルハンドラで安全でないコーディングを修正しました。 (Tom Lane)
これはシャットダウンする命令を受けたときにwalreceiverプロセスがクラッシュまたはデッドロックをするという稀な問題を回避します。
特定データベースに接続されていないプロセスで、パラメータ検査のためにデータベースアクセスを試みるのを回避しました。 (Vignesh C, Andres Freund)
この誤りの結果、「cannot read pg_class without having selected a database(選択されたデータベース無しにpg_classは読めません)」のようなエラーになる可能性がありました。
SSLを使っていてOpenSSLのペンディングデータバッファにちょうど256バイトの倍数が含まれている場合にlibpqで起こりうるハングアップを回避しました。 (David Binderman)
initdbにおいて、システムタイムゾーンの複数の等価な名前の扱いを改善しました。 (Tom Lane, Andrew Gierth)
initdbが、システムタイムゾーンに対する等価な名前の中から一つを選ぶために、存在するなら/etc/localtime
シンボリックリンクを検査するようにしました。
これはinitdbが複数の等しいタイムゾーンがあるときに、よりユーザが期待するであろうタイムゾーン名を選択するようにさせます。
/etc/localtime
がゾーンデータファイルへのシンボリックリンクでない場合やタイムゾーンがTZ
環境変数から決定されている場合は、振る舞いは変わりません。
これとは別に、TZ
も/etc/localtime
もヒントを提供しないときに、UTC
をそのタイムゾーンの他の書き方よりも好むようになりました。
この修正はtzdata 2019aのUCT
とUTC
を等価とするという変更で導入された困った動作を修正します。
これによりinitdbはUCT
を選んでいましたが、ほとんど誰も望まないことです。
複数のデータベースやテーブルスペースに対してpg_dumpとpg_dumpallから出力されるGRANT
コマンドの順序を修正しました。
(Nathan Bossart, Michael Paquier)
入れ子になった複数のGRANTが発行されている場合、GRANT
コマンドが相互の依存関係を考慮しない順序で与えられているためにリストアが失敗するかもしれませんでした。
pg_dumpが、PARTITION OF
を含む作成コマンドではなく、CREATE TABLE
と続くATTACH PARTITION
を使ってテーブルパーティションを再作成するようにしました。
(Álvaro Herrera, David Rowley)
これはパーティションの列順序が、ことによると親の列順序と一致するように変更されているかもしれない問題を回避します。
また、これからはパーティションはその親テーブルがリストアされなくとも(単独テーブルとしての)ダンプからリストア可能になります。ATTACH
は失敗するでしょうが、それは無視できます。
reindexdbからの誤解を招くエラー報告を修正しました。 (Julien Rouhaud)
並列ジョブを使っていてエラーが起きた場合に、vacuumdbが確実に正しいステータスを返すようにしました。 (Julien Rouhaud)
contrib/auto_explain
が並列問い合わせで問題を起こさないように修正しました。
(Tom Lane)
これまでは、auto_explain
で親問い合わせが記録されないものとなっていても、並列ワーカが問い合わせのログ記録を試みるかもしれませんでした。
これは時には動作しますが混乱を招きます。加えて、場合によっては「could not find key N in shm TOC(shm TOCにキーNが見つかりません)」のようなエラーになりました。
また、サンプリングレートが1.0に設定されている場合でも必ずしも全てのログ記録が行われないというoff-by-oneエラーも修正しました。
contrib/postgres_fdw
において、ローカルのBEFORE ROW UPDATE
トリガによるデータ変更の可能性を考慮するようにしました。
(Shohei Mochizuki)
UPDATE
では変更されていない列をトリガが変更した場合、新たな値はリモートサーバに転送されませんでした。
Windowsでデータベース文字エンコーディングがSQL_ASCIIに設定されていて非ASCII文字列のログ書き込みを試みたときの失敗を回避しました。 (Noah Misch)
従来は、このような文字列はUTF-8でなければならないと想定していて、有効にエンコードされていないと見られる場合にはエラーを投げていました。 これからは、変換されていないバイト列を単にログに送出します。
PL/pgSQLのヘッダファイルをC++に対して安全にしました。 (George Tarasov)