Notas de lanzamiento de Django 5.2.1

7 de mayo de 2025

Django 5.2.1 soluciona un problema de seguridad con severidad «moderada» y varios bugs en la versión 5.2.

Esta versión se construyó utilizando una versión actualizada de setuptools, lo que produce nombres de archivo compatibles con PEP 491 y PEP 625 y resuelve así un aviso de PyPI sobre nombres de archivos de distribución no compatibles. Esta modificación solo afecta al proceso de empaquetado de Django y no impacta el comportamiento de Django.

CVE-2025-32873: Posibilidad de denegación de servicio en strip_tags()

La función strip_tags() sería lenta para evaluar ciertos inputs que contienen secuencias grandes de etiquetas HTML incompletas. Esta función se utiliza para implementar el filtro de plantilla striptags, que también estaba así vulnerable.

La función strip_tags() ahora lanza una excepción SuspiciousOperation si encuentra un número inusualmente grande de etiquetas de apertura no cerradas.

Bugfixes

  • Se ha corregido una regresión en Django 5.2 que causaba un crash cuando se anotaban expresiones agregadas sobre consultas que utilizan agrupaciones explícitas por transformaciones seguidas de referencias a campos (#36292).

  • Se ha corregido una regresión en Django 5.2 que causaba consultas innecesarias cuando se prefetch relaciones de claves foráneas nulas (#36290).

  • Se ha corregido una regresión en Django 5.2 que causaba un crash de QuerySet.bulk_create() con campos geométricos nulos en PostGIS (#36289).

  • Se ha corregido una regresión en Django 5.2 que causaba la selección incorrecta de campos cuando se utilizaba QuerySet.alias() después de values() (#36299).

  • Se resolvió la posibilidad de corrupción de datos en file_move_safe() cuando allow_overwrite=True, donde el contenido sobrante de un archivo previamente mayor podía permanecer después de reemplazar con uno menor debido a la falta de truncación (#36298).

  • Se ha corregido una regresión en Django 5.2 que causaba un crash cuando se utilizaba QuerySet.select_for_update(of=(…)) con values()/values_list() incluyendo expresiones (#36301).

  • Se ha corregido una regresión en Django 5.2 que causaba valores incorrectos al devolverse desde QuerySet.values_list() cuando se especificaban nombres de campos duplicados (#36288).

  • Se ha corregido una regresión en Django 5.2 donde el mensaje de error de validación de contraseña de MinimumLengthValidator no se traducía correctamente cuando se utilizaban locales no inglesas (#36314).

  • Se ha corregido una regresión en Django 5.2 que causaba que el bloque object-tools se renderizara dos veces cuando se utilizaban plantillas de administración personalizadas con bloques sobrescritos debido a cambios en la estructura del bloque base de la página de administración (#36331).

  • Se ha corregido una regresión en Django 5.2, introducida al solucionar CVE 2025-26699, donde el filtro de plantilla wordwrap no preservaba líneas vacías entre párrafos después de envolver texto (#36341).

  • Fixed un regresivo en Django 5.2 que causaba una caída cuando se serializaban alternativas de correo electrónico o adjuntos debido a malas coincidencias con tuplas nombradas (#36309).

  • Se corrigió un regresivo en Django 5.2 que causaba una caída cuando se utilizaba update() sobre un conjunto de consultas filtrado contra un modelo relacionado e incluyendo referencias a anotaciones a través de values() (#36360).

  • Se corrigió un bug en Django 5.2 que causaba la introspección de claves primarias compuestas identificar erróneamente IntegerField como AutoField en SQLite (#36358).

  • Se corrigió un bug en Django 5.2 que causaba una restricción unique_together redundante ser generada para claves primarias compuestas cuando se utilizaba inspectdb (#36357).