3,6%-l Pythoni hoidlatest leiti vigu, mis on seotud puuduolevate komadega

Avaldati tulemused uuringust, mis kĂ€sitleb Python-koodi kallutatust vigadele, mis on seotud komade vale kasutamisega koodis. Probleemid tulenevad sellest, et Python ĂŒhendab automaatselt loendis olevad stringid, kui need ei ole komaga eraldatud, ning kĂ€sitleb vÀÀrtust tuple'ina, kui vÀÀrtuse jĂ€rel on koma. Automatiseeritud analĂŒĂŒsi kĂ€igus analĂŒĂŒsiti 666 GitHubi hoidlat Python-koodiga, mille kĂ€igus tuvastasid teadlased vĂ”imalikud komade probleemid 5% uuritud projektidest.

Edasi liikudes kĂ€sitsi kontrollimine nĂ€itas, et tegelikke vigu esineb vaid 24 hoidlas (3.6%), samas kui ĂŒlejÀÀnud 1.4% on valehĂ€ired (nĂ€iteks vĂ”is olla teadlikult vahele jĂ€etud koma failiteede, pika hash'i, HTML-blokkide vĂ”i SQL-vĂ€ljendite eraldamiseks). Pidage meeles, et nende 24 reaalse vea hulka kuuluvad suured projektid nagu Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield ja django-helpdesk. Samuti ei ole koma probleemid spetsiifilised Pythonile ja esinevad sageli C/C++ projektides (hiljutised parandused — LLVM, Mono, Tensorflow).

Peamised uuritud vigade tĂŒĂŒbid:

  • Juhuslikult vahele jĂ€etud koma loendites, tupikutes ja kogudes, mis viib ridade ĂŒhendamiseni, selle asemel et tĂ”lgendada neid eraldi vÀÀrtustena. NĂ€iteks Sentry puhul ĂŒks testides jĂ€eti vahele koma ridade vahel 'releases' ja 'discover' loendis, mis viis mitteeksisteeriva töötleja '/releasesdiscover' kontrollimise asemel eraldi kontrollimisele '/releases' ja '/discover'.
    3,6%-l Pythoni hoidlatest leiti vigu, mis on seotud puuduolevate komadega

    Teine nĂ€ide — vahele jĂ€etud koma rapidpro's viis kahe erineva reegli ĂŒhendamiseni real 572:

    3,6%-l Pythoni hoidlatest leiti vigu, mis on seotud puuduolevate komadega
  • Ühe elemendi tupeldamise mÀÀratlemise lĂ”pus puuduv koma, mis pĂ”hjustab, et jagamisel antakse mitte tupel, vaid tavaline tĂŒĂŒp. NĂ€iteks vĂ€ljend "values = (1,)" mÀÀrab muutuja ĂŒhe elemendi tupel, kuid "values = (1)" mÀÀrab tĂ€isarvu tĂŒĂŒbi. Ülevaateid antud mÀÀratlustes ei mĂ”juta ja need on valikulised, samas kui tupeli olemasolu mÀÀrates mÀÀrab parser ainult komade olemasolu. REST_FRAMEWORK = { ‘DEFAULT_PERMISSION_CLASSES’: ( ‘rest_framework.permissions.IsAuthenticated’ # tupelile antakse string. ) }
  • Tagurpidi olukord — liigsed komad mÀÀramises. Kui mÀÀramise lĂ”pus on kogemata jÀÀnud koma, siis antakse vÀÀrtusena tavalisest tĂŒĂŒbist tupel (nĂ€iteks kui "value = 1" asemel on kirjutatud "value = 1,").

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster