Сыналган 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).

Изилдөөчү каталардын негизги түрлөрү:

  • Тизмелерде, кортеждерде жана топтомдордо кокусунан үтүр жок болуп, саптар өзүнчө маанилер катары чечмеленбестен, бириктирилишине алып келет. Мисалы, Сентриде сыноолордун бири тизмедеги "релиздер" жана "ачуу" саптарынын ортосундагы үтүрдү өткөрүп жиберди, натыйжада "/releases" жана " текшерүүнүн ордуна жок "/releasesdiscover" иштеткич текшерилди. / Discover" өзүнчө.
    Сыналган Python репозиторийлеринин 3.6%ында үтүр каталары жок болгон

    Дагы бир мисал, rapidpro ичиндеги жок үтүр эки башка эреженин 572-сапта бириктирилишине себеп болгон:

    Сыналган Python репозиторийлеринин 3.6%ында үтүр каталары жок болгон

  • Бир элементтүү кортеждин аныктамасынын аягындагы жок үтүр, бул дайындоо кортеждин ордуна кадимки типти дайындоого алып келет. Мисалы, "маанилер = (1,)" туюнтмасы бир элементтин кортежинин өзгөрмөсүнө ыйгарылышына алып келет, ал эми "маанилер = (1)" бүтүн сан түрүнүн дайындалышына алып келет. Бул тапшырмалардагы кашаалар типти аныктоого таасир этпейт жана милдеттүү эмес, ал эми кортеждин болушу үтүрлөрдүн болушуна жараша гана талдоочу тарабынан аныкталат. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # кортеждин ордуна сап ыйгарылат. ) }
  • Тескерисинче, тапшырма учурунда кошумча үтүр коюлат. Эгерде тапшырманын аягында кокусунан үтүр калтырылса, кортеж кадимки түрдүн ордуна маани катары дайындалат (мисалы, "маани = 1" ордуна "маани = 1" көрсөтүлсө).

Source: opennet.ru

Комментарий кошуу