3.6% saka repositori Python sing diuji wis ilang kesalahan koma

Asil saka sinau ing kerentanan kode Python kanggo kasalahan related kanggo nggunakake salah koma ing kode wis diterbitake. Masalah disababaké déning kasunyatan sing nalika enumerating, Python otomatis concatenates strings ing dhaftar yen lagi ora dipisahake dening koma, lan uga nganggep Nilai minangka tuple yen Nilai ngiring dening koma. Sawise nganakake analisis otomatis 666 repositori GitHub kanthi kode Python, peneliti nemtokake masalah koma ing 5% proyek sing diteliti.

Pemriksaan manual luwih lanjut nuduhake yen kesalahan nyata mung ana ing 24 repositori (3.6%), lan 1.4% sing isih ana positif palsu (contone, koma bisa kanthi sengaja diilangi ing antarane baris kanggo nggabungake path file multi-line, hash dawa, HTML. blok utawa ekspresi SQL). Wigati dimangerteni manawa ing antarane 24 repositori kanthi kesalahan nyata yaiku proyek gedhe kaya Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield lan django-helpdesk. Nanging, masalah karo koma ora spesifik kanggo Python lan asring muncul ing proyek C / C ++ (conto perbaikan anyar yaiku LLVM, Mono, Tensorflow).

Jinis utama kesalahan sinau:

  • Ora sengaja ilang koma ing dhaptar, tuple, lan set, nyebabake strings digabungake tinimbang diinterpretasikake minangka nilai sing kapisah. Contone, ing Sentry, salah sawijining tes ora kejawab koma ing antarane senar "rilis" lan "nemokake" ing dhaptar, sing nyebabake mriksa panangan "/releasesdiscover" sing ora ana, tinimbang mriksa "/releases" lan " / nemokake" kanthi kapisah.
    3.6% saka repositori Python sing diuji wis ilang kesalahan koma

    Conto liyane yaiku koma sing ilang ing rapidpro nyebabake rong aturan sing beda digabungake ing baris 572:

    3.6% saka repositori Python sing diuji wis ilang kesalahan koma

  • Koma sing ilang ing pungkasan definisi tuple unsur tunggal, nyebabake tugas kanggo nemtokake jinis biasa tinimbang tuple. Contone, ekspresi "nilai = (1,)" bakal ngasilake penugasan menyang variabel tuple saka siji unsur, nanging "nilai = (1)" bakal ngasilake tugas saka jinis integer. Tanda kurung ing tugas iki ora mengaruhi definisi jinis lan opsional, lan anané tuple ditemtokake dening parser mung adhedhasar anané koma. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # bakal diwenehi string tinimbang tuple. ) }
  • Kahanan sing ngelawan yaiku koma ekstra sajrone tugas. Yen koma ora sengaja ditinggalake ing pungkasan tugas, tuple bakal ditugasake minangka nilai tinimbang jinis normal (contone, yen "nilai = 1," ditemtokake tinimbang "nilai = 1").

Source: opennet.ru

Add a comment