Projet

Général

Profil

Development #46625

/login/, username/nonce, ValueError: A string literal cannot contain NUL (0x00) characters.

Ajouté par Sentry Io il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
14 septembre 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

https://sentry.entrouvert.org/entrouvert/publik/issues/4629/

ValueError: A string literal cannot contain NUL (0x00) characters.
(23 additional frame(s) were not displayed)
...
  File "django/db/models/query.py", line 53, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch)
  File "django/db/models/sql/compiler.py", line 899, in execute_sql
    raise original_exception
  File "django/db/models/sql/compiler.py", line 889, in execute_sql
    cursor.execute(sql, params)
  File "django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)

Fichiers


Demandes liées

Lié à Authentic 2 - Bug #48114: crash migration sur version à jourFermé29 octobre 2020

Actions

Révisions associées

Révision d3c962e0 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 3 ans

misc: check null characters in query-string and form data (#46625)

Révision 7a3be23b (diff)
Ajouté par Benjamin Dauvergne il y a plus de 3 ans

validators: work around lack of NULL char check in forms.CharField (#46625)

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 3 ans

  • Projet changé de Suivi des traces à Authentic 2
  • Sujet changé de ValueError: A string literal cannot contain NUL (0x00) characters. à /login/, username/nonce, ValueError: A string literal cannot contain NUL (0x00) characters.

Comme #45672 mais pour d'autres champs, nonce & username dans les traces repérées, exemples :

  • nonce = '_E327108CF392D4C3CEE091EE75ADBFD07lwfr\x00\rhjv7a'
  • username = '\x00gf0zg" a=ba04zg'
#2

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

  • Assigné à mis à Benjamin Dauvergne
#3

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

1. Solution globale via un middleware pour les query-string et les form data classiques
2. monkeypatch de CharField pour les formulaires multipart/formdata et de rest_framework pour les contenus JSON, restera les éventuels contenus JSON parsés "manuellement"

#5

Mis à jour par Paul Marillonnet il y a plus de 3 ans

  • Pourquoi la classe de validateur doit-elle être déconstructible ?

Dans une moindre mesure :

  • La modif sur src/authentic2/views.py dans 0002 me paraît être du code churn pour rien. (Peut-être tu avais commencé des trucs dans ce fichier puis laissé tombé en oubliant de restaurer à l'état initial ?)
  • Du détail franchement, mais dans les commentaires de src/authentic2/__init__.py je laisserais juste le lien vers le ticket django qui est l'info manquante la plus importante. Le ticket redmine EO on l'a déjà dans le message de commit. Et le commit GH ne nous dit pas grand chose, je ne fais pas le lien entre leur ajout d'un formulaire dans l'admin et ton tour de passe-passe sur CharField.__init__.
#6

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

Paul Marillonnet a écrit :

  • Pourquoi la classe de validateur doit-elle être déconstructible ?

Aucune idée j'ai copié/collé le code de Django, si ça te passionne il est là https://github.com/django/django/blob/master/django/core/validators.py#L540

Dans une moindre mesure :

  • La modif sur src/authentic2/views.py dans 0002 me paraît être du code churn pour rien. (Peut-être tu avais commencé des trucs dans ce fichier puis laissé tombé en oubliant de restaurer à l'état initial ?)

Yep je vire.

  • Du détail franchement, mais dans les commentaires de src/authentic2/__init__.py je laisserais juste le lien vers le ticket django qui est l'info manquante la plus importante. Le ticket redmine EO on l'a déjà dans le message de commit. Et le commit GH ne nous dit pas grand chose, je ne fais pas le lien entre leur ajout d'un formulaire dans l'admin et ton tour de passe-passe sur CharField.__init__.

Ok.

#8

Mis à jour par Paul Marillonnet il y a plus de 3 ans

  • Statut changé de Solution proposée à Solution validée

Benjamin Dauvergne a écrit :

Aucune idée j'ai copié/collé le code de Django, si ça te passionne il est là https://github.com/django/django/blob/master/django/core/validators.py#L540

C'est https://code.djangoproject.com/ticket/21275.

Ack.

#9

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 7a3be23b0d35135e2d6c45e51fdf97d4ffc23751
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue Oct 6 11:58:49 2020 +0200

    validators: work around lack of NULL char check in forms.CharField (#46625)

commit d3c962e09588ba7f2268814ed747bff3232b71ad
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue Oct 6 12:40:08 2020 +0200

    misc: check null characters in query-string and form data (#46625)
#10

Mis à jour par Paul Marillonnet il y a plus de 3 ans

  • Lié à Bug #48114: crash migration sur version à jour ajouté
#11

Mis à jour par Frédéric Péters il y a plus de 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF