Des erreurs liées aux virgules manquantes ont été identifiées dans 3,6 % des dépôts Python testés

Les résultats d'une étude sur la vulnérabilité du code en Python face aux erreurs liées à l'utilisation incorrecte des virgules dans le code ont été publiés. Les problèmes sont causés par le fait que lors des énumérations, Python fusionne automatiquement les chaînes dans une liste si elles ne sont pas séparées par une virgule, et traite également une valeur comme un tuple si elle est suivie d'une virgule. Après une analyse automatisée de 666 dépôts GitHub contenant du code Python, les chercheurs ont identifié des problèmes potentiels liés aux virgules dans 5 % des projets étudiés.

Une vérification manuelle ultérieure a révélé que les erreurs réelles se trouvaient seulement dans 24 dépôts (3,6 %), tandis que les 1,4 % restants étaient des faux positifs (par exemple, une virgule pouvait avoir été intentionnellement omise entre les chaînes pour fusionner des chemins de fichiers répartis sur plusieurs lignes, des hachages longs, des blocs HTML ou des expressions SQL). Il est intéressant de noter que parmi les 24 dépôts avec de vraies erreurs, on trouve des projets majeurs tels que Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield et django-helpdesk. De plus, les problèmes de virgules ne sont pas spécifiques à Python et apparaissent souvent dans des projets en C/C++ (exemples récents de corrections – LLVM, Mono, Tensorflow).

Les principaux types d'erreurs étudiées :

  • Une virgule manquante par inadvertance dans des listes, tuples et ensembles, entraînant la fusion de chaînes au lieu de leur interprétation comme valeurs distinctes. Par exemple, dans Sentry, dans l'un des tests, une virgule a été omise entre les chaînes « releases » et « discover » dans une liste, ce qui a conduit à la vérification d'un gestionnaire inexistant « /releasesdiscover », au lieu de vérifier séparément « /releases » et « /discover ».
    Des erreurs liées aux virgules manquantes ont été identifiées dans 3,6 % des dépôts Python testés

    Un autre exemple – une virgule manquante dans rapidpro a conduit à la fusion de deux règles différentes à la ligne 572 :

    Des erreurs liées aux virgules manquantes ont été identifiées dans 3,6 % des dépôts Python testés
  • Une virgule manquante à la fin de la définition d'un tuple à un élément, entraînant que lors de l'affectation, un type ordinaire sera assigné au lieu d'un tuple. Par exemple, l'expression « values = (1,) » affectera à la variable un tuple à un élément, mais « values = (1) » entraînera l'affectation d'un type entier. Les parenthèses dans ces affectations n'affectent pas la définition du type et sont facultatives, alors que la présence d'un tuple est déterminée par le parser uniquement sur la base de la présence de virgules. REST_FRAMEWORK = { ‘DEFAULT_PERMISSION_CLASSES’: ( ‘rest_framework.permissions.IsAuthenticated’ # au lieu d'un tuple, une chaîne sera assignée. ) }
  • La situation inverse se produit lorsque des virgules superflues sont présentes lors de l'affectation. Si une virgule est accidentellement laissée à la fin d'une affectation, une tuple sera attribuée au lieu d'un type ordinaire (par exemple, si au lieu de « value = 1 » il est indiqué « value = 1, »).

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster