Туршилтанд хамрагдсан Python репозиторуудын 3.6% нь таслал дутуу алдаатай байсан

Кодын таслалыг буруу ашигласантай холбоотой алдааны Python кодын эмзэг байдлын талаарх судалгааны үр дүн нийтлэгдсэн байна. Python нь тоолохдоо таслалаар тусгаарлагдаагүй тохиолдолд жагсаалтын мөрүүдийг автоматаар холбодог, мөн утгын араас таслал тавьсан бол утгыг залгуур гэж үздэгтэй холбоотой асуудал үүсдэг. Python код бүхий 666 GitHub репозиторыг автоматжуулсан дүн шинжилгээ хийсний дараа судлаачид судлагдсан төслүүдийн 5% -д таслалтай байж болзошгүй асуудлуудыг тодорхойлсон.

Цаашид гар аргаар шалгахад бодит алдаа ердөө 24 хадгалах санд (3.6%) байгааг харуулсан ба үлдсэн 1.4% нь худал эерэг (жишээлбэл, олон мөрт файлын зам, урт хэш, HTML-г хооронд нь холбохын тулд мөр хооронд таслалыг зориудаар орхиж болно. блокууд эсвэл SQL илэрхийллүүд). Бодит алдаатай 24 репозиторын дунд Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield, django-helpdesk зэрэг томоохон төслүүд байсан нь анхаарал татаж байна. Гэсэн хэдий ч таслалтай холбоотой асуудлууд нь Python-д хамаарахгүй бөгөөд ихэвчлэн C/C++ төслүүд дээр гарч ирдэг (сүүлийн засваруудын жишээ бол LLVM, Mono, Tensorflow).

Судлагдсан алдааны үндсэн төрлүүд:

  • Жагсаалт, багц болон олонлогт таслалыг санамсаргүйгээр алдсанаас тэмдэгт мөрүүдийг салангид утга болгон тайлбарлахын оронд залгахад хүргэж байна. Жишээлбэл, Sentry-д тестүүдийн нэг нь жагсаалтын "releases" болон "discover" мөрүүдийн хооронд таслалыг орхисон бөгөөд үүний үр дүнд "/releases" болон "-ыг шалгахын оронд байхгүй "/releasesdiscover" зохицуулагчийг шалгасан. / Discover" гэж тус тусад нь бичнэ.
    Туршилтанд хамрагдсан Python репозиторуудын 3.6% нь таслал дутуу алдаатай байсан

    Өөр нэг жишээ бол rapidpro-д таслал дутсан нь 572-р мөрөнд хоёр өөр дүрмийг нэгтгэхэд хүргэсэн:

    Туршилтанд хамрагдсан Python репозиторуудын 3.6% нь таслал дутуу алдаатай байсан

  • Нэг элементийн хэлхээний тодорхойлолтын төгсгөлд таслал дутуу байгаа нь даалгаврыг тохируулагч биш ердийн төрлийг онооход хүргэдэг. Жишээлбэл, "утга = (1,)" илэрхийлэл нь нэг элементийн багцын хувьсагчийг хуваарилахад хүргэдэг, харин "утга = (1)" нь бүхэл тооны төрлийн оноолтыг бий болгоно. Дээрх даалгаврын хаалт нь төрлийг тодорхойлоход нөлөөлөхгүй бөгөөд сонголттой бөгөөд залгуур байгаа эсэхийг зөвхөн таслал байгаа эсэх дээр үндэслэн задлан шинжлэгч тодорхойлно. REST_FRAMEWORK = { 'ӨГӨГДМӨЛ_ЗӨВШӨӨРӨЛИЙН_АНГИУД': ( 'rest_framework.permissions.IsAuthenticated' #-д хэлхээний оронд стринг онооно. ) }
  • Эсрэг нөхцөл байдал нь даалгаврын явцад нэмэлт таслал юм. Хэрэв даалгаврын төгсгөлд таслал санамсаргүй орхигдвол ердийн төрлийн оронд утгыг залгах болно (жишээлбэл, хэрэв "утга = 1"-ийн оронд "утга = 1" гэж заасан бол).

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх