Notas de lanzamiento de Django 3.2.1

4 de mayo de 2021

Django 3.2.1 corrige una cuestión de seguridad y varios errores en 3.2.

CVE-2021-31542: Posible travesía del directorio mediante archivos subidos

Se permitió la travesía del directorio mediante archivos subidos con nombres de archivo adecuadamente elaborados por MultiPartParser, UploadedFile y FieldFile.

Para mitigar este riesgo, se aplica ahora una sanitización más estricta del nombre de archivo y la ruta.

Bugfixes

  • Se ha corregido la detección de GDAL 3.2 en Windows (#32544).

  • Se ha fijado un error en Django 3.2 donde las subclases de BigAutoField y SmallAutoField no estaban permitidas para el parámetro de configuración DEFAULT_AUTO_FIELD (#32620).

  • Se ha fijado una regresión en Django 3.2 que causaba un crash de QuerySet.values()/values_list() después de QuerySet.union(), intersection() y difference() cuando estaba ordenada por un campo no anotado (#32627).

  • Se ha restaurado, tras una regresión en Django 3.2, la visualización del mensaje de excepción en la página de depuración técnica 404 (#32637).

  • Se ha fijado un error en Django 3.2 donde una comprobación de sistema se caía en relaciones uno a uno reversas en CheckConstraint.check o UniqueConstraint.condition (#32635).

  • Se ha fijado una regresión en Django 3.2 que causaba un crash de ModelAdmin.search_fields cuando se buscaba contra frases con comillas dobles no equilibradas (#32649).

  • Se ha fijado un error en Django 3.2 donde los errores de búsqueda de variables se registraban al renderizar el plantilla del mapa de sitio si las alternativas no estaban definidas (#32648).

  • Se ha corregido una regresión en Django 3.2 que causaba un error cuando se combinaban objetos Q() que contienen expresiones booleanas (#32548).

  • Se ha corregido una regresión en Django 3.2 que causaba un error de QuerySet.update() en un conjunto de consultas ordenado por campos heredados o unidos en MySQL y MariaDB (#32645).

  • Se corrigió una regresión en Django 3.2 que causaba un error al descodificar el valor de una cookie, utilizado por django.contrib.messages.storage.cookie.CookieStorage, en el formato pre-Django 3.2 (#32643).

  • Se ha corregido una regresión en Django 3.2 que impedía la selección de varias filas en la lista de cambios del panel administrativo utilizando el modificador de tecla Shift (#32647).

  • Se corrigió un error en Django 3.2 donde una comprobación del sistema se caía con el parámetro de configuración STATICFILES_DIRS con una lista de tuplas de 2 elementos de (prefijo, ruta) (#32665).

  • Se ha corregido un fallo persistente que involucraba la combinación bit a bit de consultas cuando se utilizan con subconsultas que comenzaron a manifestarse en Django 3.2, debido a una corrección separada utilizando Exists para exclude() relaciones de múltiples valores (#32650).

  • Se corrigió un error en Django 3.2 donde se registraban errores de búsqueda de variables cuando se renderizaban algunos plantillas administrativas (#32681).

  • Se corrigió un bug en Django 3.2 donde una lista de cambios administrativa se caía al eliminar objetos filtrados contra relaciones múltiples (#32682). La lista de cambios administrativa ahora utiliza Exists() en lugar de QuerySet.distinct() porque llamar a delete() después de distinct() no está permitido en Django 3.2 para abordar la posibilidad de pérdida de datos.

  • Se ha corregido una regresión en Django 3.2 donde el entorno del proceso llamante no se pasaba al comando dbshell en PostgreSQL (#32687).

  • Se ha corregido una regresión de rendimiento en Django 3.2 al construir filtros complejos con consultas secundarias (#32632). Como efecto colateral, se ha eliminado la API privada para comprobar la igualdad de django.db.sql.query.Query.