3.6% tina repositori Python anu diuji ngagaduhan kasalahan koma leungit

Hasil ulikan ngeunaan kerentanan kode Python kana kasalahan anu aya hubunganana sareng pamakean koma anu salah dina kode parantos diterbitkeun. Masalah anu disababkeun ku kanyataan yén nalika enumerating, Python otomatis concatenates string dina daptar lamun maranéhna teu dipisahkeun ku koma, sarta ogé Ngaruwat nilai salaku tuple a lamun nilaina dituturkeun ku koma. Saatos ngalaksanakeun analisa otomatis tina 666 repositori GitHub nganggo kode Python, panalungtik ngaidentipikasi kamungkinan masalah koma dina 5% tina proyék anu ditaliti.

Pamariksaan manual salajengna nunjukkeun yén kasalahan nyata ngan ukur aya dina repositori 24 (3.6%), sareng sésana 1.4% positip palsu (contona, koma tiasa ngahaja dileungitkeun antara garis pikeun ngahijikeun jalur file multi-garis, hashes panjang, HTML. blok atawa éksprési SQL). Éta noteworthy yén diantara 24 repositories kalawan kasalahan nyata éta proyék badag kayaning Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, Django-colorfield na Django-helpdesk. Tapi, masalah sareng koma henteu khusus pikeun Python sareng sering muncul dina proyék C / C ++ (conto perbaikan panganyarna nyaéta LLVM, Mono, Tensorflow).

Jenis utama kasalahan anu ditalungtik:

  • Ngahaja leungit koma dina béréndélan, tuples, jeung susunan, ngabalukarkeun string jadi concatenated tinimbang keur diinterpretasi salaku nilai misah. Contona, dina Sentry, salah sahiji tes lasut koma antara string "release" jeung "nemuan" dina daptar, nu ngakibatkeun mariksa non-existent "/releasesdiscover" Handler, tinimbang mariksa "/ release" jeung " / manggihan" misah.
    3.6% tina repositori Python anu diuji ngagaduhan kasalahan koma leungit

    Conto sanésna nyaéta koma anu leungit dina rapidpro nyababkeun dua aturan anu béda dihijikeun dina jalur 572:

    3.6% tina repositori Python anu diuji ngagaduhan kasalahan koma leungit

  • Hiji koma leungit dina tungtung harti tuple unsur tunggal, ngabalukarkeun ngerjakeun napelkeun tipe biasa tinimbang tuple a. Contona, éksprési "nilai = (1,)" bakal ngahasilkeun ngerjakeun kana variabel tuple hiji unsur, tapi "nilai = (1)" bakal ngahasilkeun tugas tina tipe integer. Kurung dina assignments ieu teu mangaruhan harti tipe sarta pilihan, sarta ayana tuple ditangtukeun ku parser ngan dumasar kana ayana koma. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # bakal ditugaskeun string tinimbang tuple a. )}
  • Kaayaan sabalikna nyaéta koma tambahan nalika ngerjakeun tugas. Upami koma ngahaja ditinggalkeun di tungtung tugas, tuple bakal ditugaskeun salaku nilai tibatan jinis biasa (contona, upami "nilai = 1," ditunjuk tibatan "nilai = 1").

sumber: opennet.ru

Tambahkeun komentar