# Django 5.2.8 documentation

# Django 2.0.3 版本发行说明

2018 年 3 月 6 日

Django 2.0.3 修复了 2.0.2 版本中的两个安全问题和一些错误。此外，还整合了来自 Transifex 的最新字符串翻译。

## CVE-2018-7536: `urlize` 和 `urlizetrunc` 模板过滤器中的拒绝服务可能性问题

`django.utils.html.urlize()` 函数在处理某些输入时非常慢，这是由于两个正则表达式中的灾难性回溯漏洞引起的。`urlize()` 函数用于实现 `urlize` 和 `urlizetrunc` 模板过滤器，因此这两个过滤器也存在漏洞。

问题正则表达式被替换为具有相似行为的解析逻辑。

## CVE-2018-7537: `truncatechars_html` 和 `truncatewords_html` 模板过滤器中存在拒绝服务可能性问题。

如果给 `django.utils.text.Truncator` 的 `chars()` 和 `words()` 方法传递了 `html=True` 参数，由于正则表达式中的灾难性回溯漏洞，它们在处理某些输入时非常慢。`chars()` 和 `words()` 方法用于实现 `truncatechars_html` 和 `truncatewords_html` 模板过滤器，因此这两个过滤器也存在漏洞。

正则表达式中的回溯问题已经修复。

## 漏洞修复

- 已修复一个回归问题，该问题导致切片的 `QuerySet.distinct().order_by()` 后跟 `count()` 会导致崩溃（#29108）。

- 优先考虑了在泰国区域设置下没有 `%f` 的日期时间和时间输入格式，以修复管理员时间选择器小部件显示 "undefined" 的问题（#29109）。

- 已修复使用 `QuerySet.order_by(Exists(...))` 时的崩溃问题（#29118）。

- 使 `Q.deconstruct()` 在多个关键字参数的情况下具有确定性（#29125）。您可能需要修改现有迁移中的 `Q`，或者接受一个自动生成的迁移。

- 已修复一个回归问题，其中带有列表参数的 `When()` 表达式会导致崩溃（#29166）。

- 已修复在子查询中使用 `Window()` 表达式时的崩溃问题（#29172）。

- 已修复 `AbstractBaseUser.normalize_username()` 在 `username` 参数不是字符串时的崩溃问题（#29176）。