E.15. 发布版本 10.9 #
发布日期:. 2019-06-20
本次发布包含来自 10.8 的多项修复。有关 10 主版本新特性的说明,请参见第 E.24 节。
E.15.2. 变更
修复 SCRAM 验证信息解析中的缓冲区溢出隐患(Jonathan Katz,Heikki Linnakangas,Michael Paquier)
任何已认证用户都可以通过将自己的密码修改为恶意构造的值,引发基于栈的缓冲区溢出。除了使 PostgreSQL 服务器崩溃之外,这还可能足以让攻击者以 PostgreSQL 操作系统账户的身份执行任意代码。
libpq 中也存在类似的溢出隐患,可能允许恶意服务器使客户端崩溃,甚至以客户端的操作系统账户执行任意代码。
PostgreSQL 项目感谢 Alexander Lakhin 报告此问题。(CVE-2019-10164)
修复表具有部分排除约束时
ALTER TABLE ... ALTER COLUMN TYPE发生的失败(Tom Lane)修复为域约束添加注释时
COMMENT命令发生的失败(Daniel Gustafsson,Michael Paquier)防止 hash 聚合的 hash 键列表中存在重复列时可能发生的内存破坏(Andrew Gierth)
修复归并追加计划的错误生成(Tom Lane)
此错误可能导致“could not find pathkey item to sort”错误。
修复带有重复连接名称的查询的不正确输出(Philip Dubé)
这一疏漏导致包含此类查询的视图转储/恢复失败。
修复
json_to_record()和json_populate_record()中将 JSON 字符串字面量转换为 JSON 类型输出列的处理(Tom Lane)这些情况下应将字面量作为独立的 JSON 值输出,但如果字面量包含任何需要转义的字符,代码就会出现错误行为。
修复对正则表达式中
{1,1}量词的不正确优化(Tom Lane)此类量词被视为无操作并被优化掉;但文档规定,它们会为所附着的子表达式施加贪婪性,或在使用非贪婪变体
{1,1}?时施加非贪婪性,而实际并未如此。只有当子表达式包含捕获括号或反向引用时,才会发生这种错误行为。避免初始化新进程的
pg_stat_activity数据时可能发生的失败(Tom Lane)某些可能失败的操作,例如将从 SSL 证书提取的字符串转换为数据库编码,原本在临界区内执行。此处的失败会违反共享
pg_stat_activity数据的访问协议,导致整个数据库卡死。修复检查预先存在的共享内存段是否仍被冲突的 postmaster 使用时的竞争条件(Tom Lane)
修复 WAL 接收进程信号处理函数中的不安全代码(Tom Lane)
这避免了 WAL 接收进程进程在收到关闭指令时崩溃或死锁的罕见问题。
避免在未连接到特定数据库的进程中,为检查参数而尝试访问数据库(Vignesh C,Andres Freund)
此错误可能导致“cannot read pg_class without having selected a database”等失败。
避免使用 SSL 且 OpenSSL 的待处理数据缓冲区恰好包含 256 字节整数倍的数据时,libpq 可能挂起的问题(David Binderman)
改进 initdb 对系统时区多个等效名称的处理(Tom Lane,Andrew Gierth)
如果
/etc/localtime符号链接存在,则让 initdb 检查它,以便在系统时区的多个等效名称之间作出选择。这使 initdb 在存在多个相同时区时,更有可能选择用户预期的时区名。如果/etc/localtime不是指向时区数据文件的符号链接,或者时区是由TZ环境变量确定的,则行为不变。另外,如果
TZ和/etc/localtime都未提供线索,则优先选择UTC,而非该时区的其他拼写。这修复了 tzdata 2019a 将UCT和UTC时区名设为等效后引入的不便:initdb 之前会优先选择几乎没有人想要的UCT。修复 pg_dump 和 pg_dumpall 为数据库和表空间输出的
GRANT命令的顺序(Nathan Bossart,Michael Paquier)如果执行过级联授权,恢复可能因
GRANT命令的顺序未遵循相互依赖关系而失败。让 pg_dump 先使用
CREATE TABLE,再使用ATTACH PARTITION重建表分区,而非在创建命令中包含PARTITION OF(Á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”等失败。此外,修复了一个相差一的错误,该错误使得即使采样率设置为 1.0,也不一定记录每条查询。
在
contrib/postgres_fdw中,考虑本地BEFORE ROW UPDATE触发器可能进行的数据修改(Shohei Mochizuki)如果触发器修改了
UPDATE原本未更改的列,新值就不会传送到远程服务器。在 Windows 上,避免数据库编码设置为 SQL_ASCII 时尝试记录非 ASCII 字符串而发生失败(Noah Misch)
代码原本假定此类字符串必须采用 UTF-8 编码,如果它们看起来不是有效编码就会抛出错误。现在直接将未经转换的字节传送到日志。
使 PL/pgSQL 的头文件可安全用于 C++(George Tarasov)