3,6% testitud Python-repositooriumidest tuvastati vigu, mis on seotud puuduvate koma(de)ga

Avaldatud on uuringu tulemused, kus uuriti Python-koodi alti vigu, mis on seotud komade vale kasutamisega koodis. Probleemid on tingitud sellest, et Python ĂŒhendab loendis olevad read automaatselt, kui need ei ole komaga eraldatud, samuti kĂ€sitletakse vÀÀrtust tuple'ina, kui vÀÀrtusele jĂ€rgneb koma. Tehase automatiseeritud analĂŒĂŒs 666 GitHubi Python-koodiga repositooriumi ĂŒle on tuvastanud vĂ”imalikke koma probleeme 5% uuritud projektidest.

Edasine kĂ€sitsi kontroll nĂ€itas, et tegelikud vead esinevad ainult 24 repositooriumis (3,6%), samas kui ĂŒlejÀÀnud 1,4% on valehĂ€ired (nĂ€iteks vĂ”is koma olla tahtlikult vahele jĂ€etud ridade vahel, et ĂŒhendada mitmele reale jaotatud failiteede, pika koodilĂ”igu, HTML-bloki vĂ”i SQL-lause vÀÀrtused). Oluline on, et nende 24 repositooriumi hulgas, kus on tegelikud vead, on sellised suured projektid nagu Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield ja django-helpdesk. Samuti ei ole komadega seotud probleemid spetsiifilised Pythonile ja sageli ilmnevad need C/C++ projektides (hiljutised parandused — LLVM, Mono, Tensorflow).

Uuritud vigade peamised tĂŒĂŒbid:

  • Kaasatud koma, mis on kogudes, tuple'ides ja loendites intuitsiooniks, mille tagajĂ€rjel ĂŒhendatakse read ja neid ei tĂ”lgendata eraldi vÀÀrtustena. NĂ€iteks Sentry's oli ĂŒhes testis kahe rea vahel «releases» ja «discover» vahele jĂ€etud koma loendis, mis tĂ”i kaasa mitteeksisteeriva kĂ€itleja «/releasesdiscover» kontrollimise asemel eraldiseisva kontrollimise «/releases» ja «/discover».
    3,6% testitud Python-repositooriumidest tuvastati vigu, mis on seotud puuduvate koma(de)ga

    Teine nĂ€ide — koma vahelejĂ€tmine rapidpro's viis kahe erineva reegli ĂŒhendamiseni real 572:

    3,6% testitud Python-repositooriumidest tuvastati vigu, mis on seotud puuduvate koma(de)ga
  • Puuduv koma ĂŒhekohalise tupikmĂ€e mÀÀratlemise lĂ”pus, mis toob kaasa selle, et mÀÀramise kĂ€igus antakse tavaline tĂŒĂŒp tupikmĂ€e asemel. NĂ€iteks vĂ€ljend "values = (1,)" toob kaasa ĂŒhekohalise tupikmĂ€e mÀÀramise, kuid "values = (1)" toob kaasa tĂ€isarvu tĂŒĂŒbi mÀÀramise. Klambrid nimetatud mÀÀramistes ei mĂ”juta tĂŒĂŒbi mÀÀratlemist ja on valikulised, tupikmĂ€e olemasolu mÀÀrab parser ainult koma olemasolu alusel. REST_FRAMEWORK = { ‘DEFAULT_PERMISSION_CLASSES’: ( ‘rest_framework.permissions.IsAuthenticated’ # tavalise tĂŒĂŒbi asemel mÀÀratakse string. ) }
  • Vastupidine olukord — liigsed komad mÀÀramise korral. Kui mÀÀramise lĂ”pus on kogemata koma jĂ€etud, siis mÀÀratakse vÀÀrtusena tupikmĂ€e asemel tavaline tĂŒĂŒp (nĂ€iteks, kui "value = 1" asemel on mĂ€rgitud "value = 1,").

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster