E.91. 版本 9.0.9 #
发行日期:. 2012-08-17
本次发布包含对 9.0.8 的多方面修复。有关 9.0 大版本中新特性的信息,请参见第 E.100 节。.
E.91.2. 变更
防止通过 XML 实体引用访问外部文件/URL(Noah Misch、Tom Lane)
xml_parse()会尝试按需获取外部文件或 URL 来解析 XML 值中的 DTD 和实体引用,从而使无特权数据库用户能够尝试以数据库服务器的权限获取数据。虽然外部数据不会直接返回给用户,但如果数据不能解析为有效 XML,其部分内容可能暴露在错误消息中;而且无论如何,仅仅能够检查文件是否存在对攻击者就可能有用。(CVE-2012-3489)防止通过
contrib/xml2的xslt_process()访问外部文件/URL(Peter Eisentraut)libxslt 提供通过样式表命令读写文件和 URL 的能力,从而使无特权数据库用户能够以数据库服务器的权限读写数据。现通过正确使用 libxslt 的安全选项禁用该能力。(CVE-2012-3488)
此外,移除了
xslt_process()从外部文件/URL 获取文档和样式表的能力。虽然这是一个有记载的“特性”,但长期以来被认为是个坏主意。CVE-2012-3489 的修复破坏了该能力,与其花费精力修复它,我们干脆将其移除。防止 btree 索引页被过早回收(Noah Misch)
当我们允许只读事务跳过分配 XID 时,引入了已删除 btree 页在只读事务仍在访问它时就被回收的可能性。这会导致错误的索引搜索结果。由于时序要求,这种错误在实际中发生的概率似乎很低,但仍应修复。
修复新创建或重置序列的崩溃安全缺陷(Tom Lane)
如果在新创建或重置的序列上执行了
ALTER SEQUENCE,然后恰好对它调用了一次nextval(),随后服务器崩溃,WAL 重放会把序列恢复到看起来没有执行过nextval()的状态,从而使下一个nextval()调用再次返回第一个序列值。这种情况尤其可能出现在serial列上,因为创建 serial 列的序列包含一个ALTER SEQUENCE OWNED BY步骤。修复
txid_current(),使其在非热备下报告正确的纪元(epoch)(Heikki Linnakangas)这修复了上一个小版本引入的退化。
修复主库事务有大量子事务时热备启动的缺陷(Andres Freund)
这一失误导致报告为 “out-of-order XID insertion in KnownAssignedXids” 的失败。
确保
pg_start_backup()之后对backup_label文件执行 fsync(Dave Kerr)修复 walsender 进程中的超时处理(Tom Lane)
WAL 发送端后台进程疏于建立 SIGALRM 处理程序,这意味着在某些应发生超时的极端情况下它们会永远等待。
回移植压缩 fsync 请求队列的 9.1 改进(Robert Haas)
这改进了检查点期间的性能。9.1 的变更已经过足够的实际测试,看起来可以安全回移植。
修复
LISTEN/NOTIFY,使其更好地应对 I/O 问题(例如磁盘空间耗尽)(Tom Lane)写入失败之后,所有后续发送更多
NOTIFY消息的尝试都会失败,并显示诸如 “Could not read from file "pg_notify/nnnn" at offsetnnnnn: Success” 的消息。只允许被直接阻塞的进程自动取消自动清理(Tom Lane)
原始编码在某些情况下可能允许不一致的行为;特别是自动清理可能在不足
deadlock_timeout宽限期之后就被取消。改进自动清理取消的日志记录(Robert Haas)
修复日志收集器,使
log_truncate_on_rotation在服务器启动后的第一次日志轮转期间就能工作(Tom Lane)修复附加到嵌套集合操作(
UNION/INTERSECT/EXCEPT)上的WITH(Tom Lane)确保对子查询的整行引用不包含任何多余的
GROUP BY或ORDER BY列(Tom Lane)禁止在
CREATE TABLE期间复制CHECK约束和索引定义中的整行引用(Tom Lane)这种情况可能出现在带
LIKE或INHERITS的CREATE TABLE中。被复制的整行变量被错误地标记为原表而不是新表的行类型。对LIKE拒绝这种情况似乎是合理的,因为行类型之后很可能分化。对INHERITS,理想情况下应该允许它,并隐式强制转换为父表的行类型;但这需要的工作量超出了回移植的安全范围。修复
ARRAY(SELECT ...)子查询中的内存泄漏(Heikki Linnakangas、Tom Lane)修复从正则表达式中提取公共前缀的问题(Tom Lane)
代码可能被带量词的带括号子表达式(例如
^(foo)?bar)混淆。这会导致对此类模式搜索的索引优化不正确。修复解析
interval常量中带符号的hh:mm和hh:mm:ss字段的缺陷(Amit Kapila、Tom Lane)在 PL/Python 中把 Python Unicode 字符串转换为服务器编码时,使用 Postgres 而不是 Python 的编码转换函数(Jan Urbanski)
这避免了一些极端情况的问题,尤其是 Python 并不支持 Postgres 的所有编码。一个显著的功能变化是:如果服务器编码是 SQL_ASCII,你将得到该字符串的 UTF-8 表示;此前字符串中的任何非 ASCII 字符都会导致错误。
修复 PL/Python 中 PostgreSQL 编码到 Python 编码的映射(Jan Urbanski)
修复
contrib/xml2的xslt_process()中的错误报告(Tom Lane)把时区数据文件更新为 tzdata 版本 2012e,以反映摩洛哥和托克劳的夏令时法规变更