3.6% af Python geymslum sem prófuð voru innihéldu kommuvillur

Niðurstöður rannsóknar á varnarleysi Python kóða fyrir villum sem tengjast rangri notkun kommu í kóðanum hafa verið birtar. Vandamálin stafa af því að við upptalningu sameinar Python strengina á listanum sjálfkrafa ef þeir eru ekki aðskildir með kommu og fer einnig með gildið sem tuple ef gildinu er fylgt eftir með kommu. Eftir að hafa framkvæmt sjálfvirka greiningu á 666 GitHub geymslum með Python kóða greindu rannsakendur möguleg kommuvandamál í 5% af verkefnum sem rannsökuð voru.

Frekari handvirk skoðun sýndi að raunverulegar villur voru aðeins til staðar í 24 geymslum (3.6%) og hin 1.4% voru rangar jákvæðar (til dæmis var vísvitandi hægt að sleppa kommu á milli lína til að sameina fjöllínu skráarslóðir, langa kjötkássa, HTML blokkir eða SQL tjáningar). Það er athyglisvert að meðal 24 geymsla með raunverulegum villum voru svo stór verkefni eins og Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield og django-helpdesk. Hins vegar eru vandamál með kommur ekki sértæk fyrir Python og koma oft upp í C/C++ verkefnum (dæmi um nýlegar lagfæringar eru LLVM, Mono, Tensorflow).

Helstu tegundir villna sem rannsakaðar voru:

  • Það vantar fyrir slysni kommu í listum, túllum og settum, sem veldur því að strengir eru samtengdir í stað þess að vera túlkaðir sem aðskilin gildi. Til dæmis, í Sentry, missti eitt af prófunum kommu á milli strenganna „releases“ og „discover“ á listanum, sem leiddi til þess að athugað var með „/releasesdiscover“ meðhöndlun sem ekki var til, í stað þess að haka við „/releases“ og „ /uppgötvaðu" sérstaklega.
    3.6% af Python geymslum sem prófuð voru innihéldu kommuvillur

    Annað dæmi er að kommu sem vantar í rapidpro olli því að tvær mismunandi reglur voru sameinaðar á línu 572:

    3.6% af Python geymslum sem prófuð voru innihéldu kommuvillur

  • Kommu vantar í lok einþátta tuple skilgreiningar, sem veldur því að úthlutunin úthlutar venjulegri gerð frekar en tuple. Til dæmis mun orðatiltækið "gildi = (1,)" leiða til úthlutunar á breytu af túllu af einum þátti, en "gildi = (1)" mun leiða til úthlutunar af heiltölugerð. Svigarnir í þessum verkefnum hafa ekki áhrif á tegundarskilgreininguna og eru valfrjálsir og tilvist tupels er ákvörðuð af þáttaranum eingöngu út frá tilvist kommu. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # verður úthlutað streng í stað tuple. ) }
  • Hið gagnstæða ástand er aukakommum við úthlutun. Ef kommu er óvart skilin eftir í lok verkefnis verður tuple úthlutað sem gildi í stað venjulegrar tegundar (til dæmis ef „gildi = 1,“ er tilgreint í stað „gildi = 1“).

Heimild: opennet.ru

Bæta við athugasemd