Projet

Général

Profil

Bug #20498

crash au log d'une erreur contenant du non-ascii

Ajouté par Frédéric Péters il y a plus de 6 ans. Mis à jour il y a environ 5 ans.

Statut:
Rejeté
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
07 décembre 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

File "/usr/lib/python2.7/dist-packages/django/utils/log.py" in emit
  126.         message = "%s\n\nRequest repr(): %s" % (self.format(record), request_repr)

Exception Type: UnicodeDecodeError at /unistra/unistra/link
Exception Value: 'ascii' codec can't decode byte 0xc2 in position 2129: ordinal not in range(128)

À remonter la trace, passerelle/utils/jsonresponse.py :

     except Exception as e:
          [...]
                if (not isinstance(e, (Http404, PermissionDenied, ObjectDoesNotExist))
                        and getattr(e, 'log_error', True)):
                                logger.exception("Error occurred while processing request", extra=extras)

et la valeur de "e" : ProgrammingError('ERREUR: la relation \xc2\xab unistra_link \xc2\xbb n\'existe pas\nLINE 1: INSERT INTO "unistra_link" ("username", "code", "name_id") V...\n ^\n',).


Fichiers

Historique

#1

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

  • Statut changé de Nouveau à En cours
  • Assigné à mis à Benjamin Dauvergne
"%s\n\nRequest repr(): %s" % (self.format(record), request_repr)

Ici la chaîne de gauche est un str, format() retourne un str contenant de l'UTF-8 et request_repr est une unicode ne contenant que de l'ASCII, l'interpolation force l'upgrade de la chaîne template en unicode seulement la première chaîne interpolée n'étant pas convertible en ASCII ça plante.

C'est pour cela que je conseille de toujours mettre les messages de log en unicode, parce que ça force self.format(record) à retourner de l'unicode.

Donc ici ce changement suffirait,

-                                logger.exception("Error occurred while processing request", extra=extras)
+                                logger.exception(u"Error occurred while processing request", extra=extras)

J'ai pondu du code de test pour s'assurer que cela fonctionne, je vais poser ça.

#4

Mis à jour par Thomas Noël il y a environ 6 ans

(Je pense que ce pépin est toujours d'actualité ?)

J'aime assez l'idée du connecteur "dummy" (aussi pour des tests futurs), mais peut-être le renommer plus explicitement "test", ou "demo" ?

#5

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

  • Statut changé de En cours à Solution proposée
#6

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

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

Formats disponibles : Atom PDF