Në 3.6% të depozitave të testuara Python janë zbuluar gabime të lidhura me mungesën e pikave të koma.

Janë publikuar rezultatet e një studimi mbi ndjeshmërinë e kodit në gjuhën Python ndaj gabimeve të lidhura me përdorimin e gabuar të presjeve në kod. Problemet shkaktohen nga fakti se kur ka lista, Python automatikisht bashkon stringjet në listë nëse ato nuk ndahen me presje, dhe gjithashtu e trajton vlerën si një tuple nëse pas vlerës ndodhet një presje. Pas një analize automatizimi të 666 depove në GitHub me kod në gjuhën Python, studiuesit identifikuan probleme të mundshme me presjet në 5% të projekteve të studiuara.

Kontrolli i mĂ«tejshĂ«m manual tregoi se gabimet reale janĂ« tĂ« pranishme vetĂ«m nĂ« 24 depo (3.6%), ndĂ«rsa 1.4% e tjera janĂ« alarmet false (p.sh., presja mund tĂ« jetĂ« lĂ«nĂ« qĂ«llimisht jashtĂ« midis stringjeve pĂ«r tĂ« bashkuar rrugĂ«t e skedarĂ«ve tĂ« ndara nĂ« disa rreshta, hash-e tĂ« gjata, blloqe HTML ose shprehje SQL). Ajo qĂ« Ă«shtĂ« e veçantĂ« Ă«shtĂ« se mes 24 depove me gabime reale ka projekte tĂ« mĂ«dha si Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield dhe django-helpdesk. Gjithashtu, problemet me presjet nuk janĂ« specifike pĂ«r Python dhe shpesh shfaqen nĂ« projekte nĂ« C/C++ (shembuj i korrigjimeve tĂ« fundit — LLVM, Mono, Tensorflow).

Llojet kryesore të gabimeve të studiuara:

  • NjĂ« presje e lĂ«nĂ« rastĂ«sisht jashtĂ« nĂ« lista, tuple dhe conjunto, qĂ« çon nĂ« bashkimin e stringjeve nĂ« vend qĂ« tĂ« interpretohen si vlera tĂ« veçanta. PĂ«r shembull, nĂ« Sentry, nĂ« njĂ« nga testet, njĂ« presje ishte lĂ«nĂ« jashtĂ« midis stringjeve 'releases' dhe 'discover' nĂ« listĂ«, çka solli verifikimin e njĂ« trajtuesi joekzistues '/releasesdiscover', nĂ« vend tĂ« verifikimit tĂ« ndarĂ« '/releases' dhe '/discover'.
    Në 3.6% të depozitave të testuara Python janë zbuluar gabime të lidhura me mungesën e pikave të koma.

    NjĂ« shembull tjetĂ«r — njĂ« presje e lĂ«nĂ« jashtĂ« nĂ« rapidpro çoi nĂ« bashkimin e dy rregullave tĂ« ndryshme nĂ« rreshtin 572:

    Në 3.6% të depozitave të testuara Python janë zbuluar gabime të lidhura me mungesën e pikave të koma.
  • NjĂ« presje e lĂ«nĂ« jashtĂ« nĂ« fund tĂ« njĂ« pĂ«rcaktimi tĂ« tuple nga njĂ« element, qĂ« çon nĂ« faktin se gjatĂ« caktimit do tĂ« caktohet njĂ« tip normal dhe jo njĂ« tuple. PĂ«r shembull, shprehja 'values = (1,)' do tĂ« sjellĂ« caktimin e njĂ« tuple nga njĂ« element, por 'values = (1)' do tĂ« sjellĂ« cakimin e njĂ« tipi tĂ« plotĂ«. Vargjet nĂ« caktimet e sipĂ«rpĂ«rmendura nuk ndikojnĂ« nĂ« definimin e tipit dhe janĂ« tĂ« opsionaleshme, ndĂ«rsa prania e njĂ« tuple pĂ«rcaktohet nga parseri vetĂ«m nĂ« bazĂ« tĂ« pranisĂ« sĂ« presjeve. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # nĂ« vend tĂ« njĂ« tuple do tĂ« caktohet njĂ« string. ) }
  • Situata e kundĂ«rt — presje tĂ« tepĂ«rta gjatĂ« caktimit. NĂ«se nĂ« fund tĂ« caktimit Ă«shtĂ« lĂ«nĂ« rastĂ«sisht njĂ« presje, atĂ«herĂ« si vlerĂ« do tĂ« caktohet njĂ« tuple nĂ« vend tĂ« njĂ« tipi normal (p.sh., nĂ«se nĂ« vend tĂ« 'value = 1' Ă«shtĂ« vendosur 'value = 1,').

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster