Project

General

Profile

Development #44287

Compatibilité Python 3.8 C/API

Added by Benjamin Dauvergne 17 days ago. Updated 13 days ago.

Status:
Solution proposée
Priority:
Normal
Category:
-
Target version:
-
Start date:
19 Jun 2020
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

Ça fait pas mal de trucs cracras que Python 3.8 n'aime pas du tout, comme poser une exception et retourner une valeur.

Aussi il semble que la façon de récupérer le logger python ne fonctionne plus (si on a pas importé "sys" d'abord les modules ne semblent plus accessibles).

0001-python-remove-unused-PyString_Size-44287.patch View (972 Bytes) Benjamin Dauvergne, 19 Jun 2020 09:12 PM

0002-python-remove-deprecated-PyErr_Warn-44287.patch View (2.93 KB) Benjamin Dauvergne, 19 Jun 2020 09:12 PM

0003-python-use-simpler-call-format-to-prevent-warning-ab.patch View (900 Bytes) Benjamin Dauvergne, 19 Jun 2020 09:12 PM

0005-python-fix-warning-about-discarded-const-modifier-44.patch View (1.67 KB) Benjamin Dauvergne, 19 Jun 2020 09:12 PM

0006-python-simplify-get_logger_object-44287.patch View (1.87 KB) Benjamin Dauvergne, 19 Jun 2020 09:12 PM

0004-python-replace-exception-by-warning-on-logging-path-.patch View (1.31 KB) Benjamin Dauvergne, 19 Jun 2020 09:12 PM

0021-python-do-not-leak-out_pyvalue-if-method-call-protoc.patch View (1.31 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0013-python-return-NULL-if-set_hashtable_of_strings-fails.patch View (3.5 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0001-python-remove-unused-PyString_Size-44287.patch View (974 Bytes) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0017-python-return-NULL-if-get_list_of_xml_nodes-fails-44.patch View (766 Bytes) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0012-python-return-NULL-if-set_hashtable_of_pygobject-fai.patch View (3.01 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0007-python-remove-newline-before-method-call-44287.patch View (994 Bytes) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0002-python-remove-deprecated-PyErr_Warn-44287.patch View (2.93 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0003-python-use-simpler-call-format-to-prevent-warning-ab.patch View (902 Bytes) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0005-python-fix-warning-about-discarded-const-modifier-44.patch View (1.68 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0019-python-return-NULL-if-get_list_of_strings-fails-4428.patch View (764 Bytes) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0006-python-simplify-get_logger_object-44287.patch View (1.87 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0018-python-return-NULL-if-get_list_of_pygobject-fails-44.patch View (752 Bytes) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0016-python-return-NULL-if-set_list_of_pygobject-fails-44.patch View (4.22 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0011-python-free-internal-string-buffer-if-needed-in-set_.patch View (1.11 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0009-python-add-a-failure-label-to-method-wrappers-44287.patch View (2.62 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0020-python-do-not-raise-in-valid_seq-44287.patch View (758 Bytes) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0015-python-return-NULL-if-set_list_of_xml_nodes-fails-44.patch View (3.75 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0004-python-replace-exception-by-warning-on-logging-path-.patch View (1.31 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0008-python-add-macro-for-early-return-44287.patch View (715 Bytes) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0010-python-check-if-hashtable-is-NULL-before-deallocatio.patch View (1000 Bytes) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

0014-python-return-NULL-if-set_list_of_strings-fails-4428.patch View (4.02 KB) Benjamin Dauvergne, 20 Jun 2020 12:44 PM

History

#2 Updated by Frédéric Péters 17 days ago

Ça fait pas mal de trucs cracras que Python 3.8 n'aime pas du tout.

Ça a quelles conséquences concrètes ? (parce que dans Debian on a python 3.8 et lasso et je tourne dans cet environnement sans soucis).

Il y a dans la branche un "debian: make a generic debian directory" qui commence par modifier le Jenkinsfile pour explicitement pointer stretch,buster plutôt que laisser la valeur par défaut à eobuilder, alors qu'on a plutôt eu la direction inverse.

À part ça je relirai plus attentivement lundi.

#3 Updated by Benjamin Dauvergne 16 days ago

Frédéric Péters a écrit :

Ça fait pas mal de trucs cracras que Python 3.8 n'aime pas du tout.

Ça a quelles conséquences concrètes ? (parce que dans Debian on a python 3.8 et lasso et je tourne dans cet environnement sans soucis).

Ma config devait être dans un état particulier, mais PyImport_ImportModule("lasso") et PyImport_ImportModule("logging") foiraient sans raison.

Ça provoquait des levées d'exception dans le code via PyErr_SetString() (et il en reste encore) qui était ignorée ensuite par l'implémentation des méthodes et ça crashait avec un message "SystemError: login_process_process_authn_request_msg returned a result with an error set” in Python"; l'API C de Python interdit de continuer normalement lorsqu'une exception a été levée ou alors il faut la nettoyer via PyErr_Clear().

Au passage j'ai vu ce commentaire zarbi sur la nécessite d'importer "sys" avant d'importer "logging" que je n'ai vu nulle part ailleurs alors je l'ai viré et j'ai réécrit le code plus proprement, en évitant de réutiliser la variable "logging_module" pour tout.

Pour PyErr_Warn j'ai vu passé le warning de dépréciation au passage; quand aux corrections autour du modificateur "const" sur le retour PyString_AsString" c'est des warnings que je n'avais pas trop regardé mais ça cachait des utilisations de références invalides :

-               char *ckey = PyString_AsString(key);
-               g_hash_table_replace (a_hash, ckey, ((PyGObjectPtr*)value)->obj);

ici ckey pointe sur un buffer appartenant à la chaîne python "key" on a pas du tout le droit de l'insérer dans la hashtable (ça tombe bien on utilise quasiment jamais les hashtable dans Lasso, mais bon).

Il y a dans la branche un "debian: make a generic debian directory" qui commence par modifier le Jenkinsfile pour explicitement pointer stretch,buster plutôt que laisser la valeur par défaut à eobuilder, alors qu'on a plutôt eu la direction inverse.

Je vais le virer ça devait traîner sur mon master (c'est fait branche à jour).

À part ça je relirai plus attentivement lundi.

Ok.

#4 Updated by Benjamin Dauvergne 16 days ago

J'ai continué le boulot jusqu'au bout comme j'étais lancé.

#5 Updated by Frédéric Péters 13 days ago

Le "debian: make a generic debian directory" qui est dans la branche mais pas listé ci-dessus est quelque chose d'assez pénible pour une intégration officielle dans Debian, je préférerais qu'on garde le répertoire sur le côté. (et s'il faut on peut faire évoluer eobuilder pour qu'il prenne un debian-generic/ en l'absence de debian-$dist/).

-static void
+int

C'est nécessaire, ou sans conséquence parce que flag quelconque passé lors du build, de perdre le static ?

Also available in: Atom PDF