Bij 3,6% van de onderzochte Python-repositories zijn fouten vastgesteld die verband houden met weggelaten komma's.

De resultaten van het onderzoek naar de kwetsbaarheid van Python-code voor fouten die verband houden met verkeerd gebruik van komma's in de code zijn gepubliceerd. Problemen worden veroorzaakt doordat Python automatisch strings in een lijst samenvoegt als ze niet door een komma worden gescheiden, en het behandelt een waarde als een tuple als er een komma na de waarde staat. Na een geautomatiseerde analyse van 666 GitHub-repositories met Python-code hebben de onderzoekers mogelijke problemen met komma's in 5% van de bestudeerde projecten vastgesteld.

Verdere handmatige controle toonde aan dat echte fouten alleen in 24 repositories (3,6%) aanwezig zijn, terwijl de overige 1,4% valse positieven zijn (bijvoorbeeld, een komma kan opzettelijk zijn weggelaten tussen regels om gebroken bestands- of padnamen, lange hashes, HTML-blokken of SQL-uitdrukkingen samen te voegen). Opmerkelijk is dat onder de 24 repositories met echte fouten bekende projecten zoals Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield en django-helpdesk zijn. Bovendien zijn problemen met komma's niet specifiek voor Python en doen zich vaak voor in projecten in C/C++ (recentelijke voorbeelden van fixes zijn LLVM, Mono, Tensorflow).

Hoofdcategorieën van de bestudeerde fouten:

  • Per ongeluk weggelaten komma in lijsten, tuples en verzamelingen, wat leidt tot samenvoegen van strings in plaats van hun interpretatie als afzonderlijke waarden. Bijvoorbeeld, in Sentry was in een van de tests een komma weggelaten tussen de strings "releases" en "discover" in de lijst, wat leidde tot de controle van een niet-bestaande handler "\/releasesdiscover", in plaats van afzonderlijke contoles van "\/releases" en "\/discover".
    Bij 3,6% van de onderzochte Python-repositories zijn fouten vastgesteld die verband houden met weggelaten komma's.

    Een ander voorbeeld — een weggelaten komma in rapidpro leidde tot het samenvoegen van twee verschillende regels in regel 572:

    Bij 3,6% van de onderzochte Python-repositories zijn fouten vastgesteld die verband houden met weggelaten komma's.
  • Een ontbrekende komma aan het einde van de definitie van een enkelvoudige tuple, waardoor bij toewijzing niet een tuple, maar een gewone waarde wordt toegewezen. Bijvoorbeeld, de expressie „values = (1,)” leidt tot de toewijzing van een enkelvoudige tuple, terwijl „values = (1)” leidt tot de toewijzing van een geheel getal. Haakjes in de genoemde toewijzingen hebben geen invloed op de typebepaling en zijn optioneel; de aanwezigheid van een tuple wordt door de parser alleen vastgesteld op basis van de aanwezigheid van komma's. REST_FRAMEWORK = { ‘DEFAULT_PERMISSION_CLASSES’: ( ‘rest_framework.permissions.IsAuthenticated’ # in plaats van een tuple wordt een string toegewezen. ) }
  • De omgekeerde situatie — overbodige komma's bij toewijzing. Als aan het einde van een toewijzing per ongeluk een komma is achtergelaten, wordt in plaats van een gewone waarde een tuple toegewezen (bijvoorbeeld, als in plaats van „value = 1” „value = 1,” is opgegeven).

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster