V 3,6 % testovaných Python repozitárov boli zistené chyby súvisiace s chýbajúcimi čiarkami

Boli zverejnené výsledky výskumu zraniteľnosti kódu napísaného v jazyku Python voči chybám súvisiacim s nesprávnym používaním čiarky v kóde. Problémy vznikajú tým, že pri výčtoch Python automaticky spája reťazce v zozname, ak nie sú oddelené čiarkou, a tiež spracováva hodnotu ako n-ticu, ak po hodnotách nasleduje čiarka. Po vykonaní automatizovanej analýzy 666 repozitárov GitHub s kódom v Pythone vedci identifikovali možné problémy s čiarkami v 5% skúmaných projektov.

Ďalšie ručné kontroly ukázali, že skutočné chyby sa nachádzajú iba v 24 repozitároch (3.6%), zatiaľ čo ostatných 1.4% predstavujú falošné pozitíva (napríklad čiarka mohla byť zámerne vynechaná medzi reťazcami pre spojenie rozdelených na viacero riadkov súborových ciest, dlhých hashov, HTML blokov alebo SQL výrazov). Pozoruhodné je, že medzi 24 repozitármi so skutočnými chybami sa nachádzajú veľké projekty ako Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield a django-helpdesk. Problémy s čiarkami nie sú pritom špecifické len pre Python a často sa vyskytujú aj v projektoch v C/C++ (príklady nedávnych opráv - LLVM, Mono, Tensorflow).

Hlavné typy skúmaných chýb:

  • Náhodne vynechaná čiarka v zoznamoch, n-ticiach a množinách, ktorá vedie k spojeniu reťazcov namiesto ich interpretácie ako samostatných hodnôt. Napríklad v Sentry v jednom z testov bola vynechaná čiarka medzi reťazcami "releases" a "discover" v zozname, čo viedlo k overeniu neexistujúceho spracovateľa "/releasesdiscover", namiesto samostatného overenia "/releases" a "/discover."
    V 3,6 % testovaných Python repozitárov boli zistené chyby súvisiace s chýbajúcimi čiarkami

    Ďalší príklad - vynechaná čiarka v rapidpro viedla k spojeniu dvoch rôznych pravidiel v riadku 572:

    V 3,6 % testovaných Python repozitárov boli zistené chyby súvisiace s chýbajúcimi čiarkami
  • Vynechaná čiarka na konci definície n-tice z jedného prvku, čo vedie k tomu, že pri priradení sa priradí obyčajný typ, a nie n-tica. Napríklad výraz "values = (1,)" priradí premennej n-ticu z jedného prvku, no "values = (1)" priradí celočíselný typ. Zátvorky v uvedených priradeniach nemajú vplyv na definíciu typu a sú voliteľné, pričom existencia n-tice je určovaná parserom iba na základe prítomnosti čiarky. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # namiesto n-tice bude priradený reťazec. ) }
  • Obratená situácia — nadbytočné čiarky pri priradení. Ak sa na konci priradenia náhodou ponechá čiarka, bude namiesto bežného typu priradený tupl (napríklad ak je namiesto „value = 1“ uvedené „value = 1,“).

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster