Indlela yokuqwalasela i-PVS-Studio kwiTravis CI usebenzisa umzekelo we-PSP yomdlalo we-console emulator

Indlela yokuqwalasela i-PVS-Studio kwiTravis CI usebenzisa umzekelo we-PSP yomdlalo we-console emulator
I-Travis CI yinkonzo yewebhu esasazwayo yokwakha kunye nokuvavanya isofthiwe esebenzisa i-GitHub njengomthombo wekhowudi yokusingatha. Ukongeza kwezi meko zokusebenza zingentla, unokongeza owakho umbulelo kwiinketho zoqwalaselo olubanzi. Kule nqaku siza kuqwalasela iTravis CI ukuba isebenze nePVS-Studio usebenzisa umzekelo wekhowudi yePPSSPP.

Intshayelelo

UTravis CI yinkonzo yewebhu yokwakha kunye nokuvavanya isoftwe. Ngokuqhelekileyo isetyenziswe ngokubambisana nezenzo zokudibanisa okuqhubekayo.

I-PPSSPP -PSP umdlalo console emulator. Inkqubo iyakwazi ukulinganisa ukuqaliswa kwayo nayiphi na imidlalo ukusuka kwimifanekiso yedisk ejoliswe kwi-Sony PSP. Le nkqubo yakhutshwa ngoNovemba 1, 2012. I-PPSSPP inelayisensi phantsi kwe-GPL v2. Nabani na angenza uphuculo kwi ikhowudi yomthombo weprojekthi.

I-PVS-Studio - i-static code analyzer yokukhangela iimpazamo kunye nobuthathaka obunokubakho kwikhowudi yeprogram. Kweli nqaku, ngotshintsho, siya kuqalisa i-PVS-Studio kungekhona kwindawo kumatshini womphuhlisi, kodwa kwifu, kwaye sijonge iimpazamo kwi-PPSSPP.

Ukumisela iTravis CI

Siza kudinga indawo yokugcina kwi-GitHub, apho iprojekthi esiyifunayo ikhona, kunye nesitshixo se-PVS-Studio (unokufumana isitshixo sovavanyo okanye simahla kwiiprojekthi zoMthombo oVulekileyo).

Makhe siye kwindawo UTravis CI. Emva kogunyaziso usebenzisa iakhawunti yakho yeGitHub, siza kubona uluhlu lweendawo zokugcina:

Indlela yokuqwalasela i-PVS-Studio kwiTravis CI usebenzisa umzekelo we-PSP yomdlalo we-console emulator
Kuvavanyo, ndiyifake ngefolokhwe iPPSSPP.

Sivula indawo yokugcina esifuna ukuyiqokelela:

Indlela yokuqwalasela i-PVS-Studio kwiTravis CI usebenzisa umzekelo we-PSP yomdlalo we-console emulator
Okwangoku, iTravis CI ayikwazi ukwakha iprojekthi yethu kuba akukho miyalelo yokwakha. Ngoko lixesha loqwalaselo.

Ngethuba lokuhlalutya, ezinye izinto eziguquguqukayo ziya kuba luncedo kuthi, umzekelo, isitshixo se-PVS-Studio, esiya kuba yinto engathandekiyo ukucacisa kwifayile yoqwalaselo. Ke ngoko masiyongeze ukuguquguquka kokusingqongileyo sisebenzisa useto lokwakha kwiTravis CI:

Indlela yokuqwalasela i-PVS-Studio kwiTravis CI usebenzisa umzekelo we-PSP yomdlalo we-console emulator
Siza kudinga:

  • PVS_USERNAME - igama lomsebenzisi
  • PVS_KEY - isitshixo
  • MAIL_USER-i-imeyile eza kusetyenziswa ukuthumela ingxelo
  • MAIL_PASSWORD-i-imeyile yokugqitha

Ezimbini zokugqibela azikhethi. Ezi ziya kusetyenziselwa ukuthumela iziphumo ngeposi. Ukuba ufuna ukuhambisa ingxelo ngenye indlela, awudingi ukubabonisa.

Ke, songeze izinto eziguquguqukayo zokusingqongileyo esizifunayo:

Indlela yokuqwalasela i-PVS-Studio kwiTravis CI usebenzisa umzekelo we-PSP yomdlalo we-console emulator
Ngoku masenze ifayile .travis.yml kwaye uyibeke kwingcambu yeprojekthi. I-PPSSPP yayisele inefayile yoqwalaselo yeTravis CI, nangona kunjalo, yayinkulu kakhulu kwaye ayifanelekanga ngokupheleleyo kumzekelo, ngoko kwafuneka ukuba siyenze lula kakhulu kwaye sishiye kuphela izinto ezisisiseko.

Okokuqala, masibonise ulwimi, inguqulelo ye-Ubuntu Linux esifuna ukuyisebenzisa kumatshini wenyani, kunye neepakethe eziyimfuneko zokwakha:

language: cpp
dist: xenial

addons:
  apt:
    update: true
    packages:
      - ant
      - aria2
      - build-essential
      - cmake
      - libgl1-mesa-dev
      - libglu1-mesa-dev
      - libsdl2-dev
      - pv
      - sendemail
      - software-properties-common
    sources:
      - sourceline: 'ppa:ubuntu-toolchain-r/test'
      - sourceline: 'ppa:ubuntu-sdk-team/ppa'

Zonke iipakethe ezidwelisiweyo zifunelwa ngokukodwa iPPSSPP.

Ngoku sibonisa i-matrix yendibano:

matrix:
  include:
    - os: linux
      compiler: "gcc"
      env: PPSSPP_BUILD_TYPE=Linux PVS_ANALYZE=Yes
    - os: linux
      compiler: "clang"
      env: PPSSPP_BUILD_TYPE=Linux

Kancinci ngakumbi malunga necandelo Matrix. Kwi-Travis CI, kukho iindlela ezimbini zokwenza ukhetho lokwakha: eyokuqala kukucacisa uluhlu lwabaqulunqi, iintlobo zenkqubo yokusebenza, ukuguquguquka kwemekobume, njl., emva koko i-matrix yazo zonke iinhlanganisela ezinokwenzeka zenziwe; okwesibini luphawu olucacileyo lwematrix. Ewe, unokudibanisa ezi ndlela zimbini kwaye wongeze imeko eyodwa, okanye, ngokuchaseneyo, ungayibandakanyi usebenzisa icandelo. nga ndakanyi. Unokufunda ngakumbi malunga noku kwi Travis CI amaxwebhu.

Ekuphela kwento eseleyo kukubonelela ngemiyalelo yendibano ethe ngqo yeprojekthi:

before_install:
  - travis_retry bash .travis.sh travis_before_install

install:
  - travis_retry bash .travis.sh travis_install

script:
  - bash .travis.sh travis_script

after_success:
  - bash .travis.sh travis_after_success

ITravis CI ikuvumela ukuba wongeze eyakho imiyalelo yezigaba ezahlukeneyo zobomi bomatshini wenyani. Icandelo phambi_kufakela yenziwe phambi kokufaka iipakethe. Emva koko fakela, elandela ukufakwa kweepakethe kuluhlu addons.aptesisibonise ngasentla. Indibano ngokwayo iqhubeka elishicilelwe. Ukuba yonke into ihambe kakuhle, ngoko sizifumana singaphakathi emva_kwempumelelo (kweli candelo siya kuqhuba uhlalutyo olungatshintshiyo). La ayingawo onke amanyathelo anokuguqulwa, ukuba ufuna ngaphezulu, kuya kufuneka ujonge ngaphakathi Travis CI amaxwebhu.

Ukuze kube lula ukufunda, imiyalelo yafakwa kwiskripthi esahlukileyo .travis.sh, ebekwe kwingcambu yeprojekthi.

Ngoko ke sinefayile elandelayo .travis.yml:

language: cpp
dist: xenial

addons:
  apt:
    update: true
    packages:
      - ant
      - aria2
      - build-essential
      - cmake
      - libgl1-mesa-dev
      - libglu1-mesa-dev
      - libsdl2-dev
      - pv
      - sendemail
      - software-properties-common
    sources:
      - sourceline: 'ppa:ubuntu-toolchain-r/test'
      - sourceline: 'ppa:ubuntu-sdk-team/ppa'

matrix:
  include:
    - os: linux
      compiler: "gcc"
      env: PVS_ANALYZE=Yes
    - os: linux
      compiler: "clang"

before_install:
  - travis_retry bash .travis.sh travis_before_install

install:
  - travis_retry bash .travis.sh travis_install

script:
  - bash .travis.sh travis_script

after_success:
  - bash .travis.sh travis_after_success

Ngaphambi kokufaka iipakethe, siya kuhlaziya i-submodules. Oku kuyafuneka ukwakha iPPSSPP. Masidibanise umsebenzi wokuqala ku .travis.sh (qaphela ulwandiso):

travis_before_install() {
  git submodule update --init --recursive
}

Ngoku siza ngqo ukuseta uphehlelelo oluzenzekelayo lwePVS-Studio kwiTravis CI. Okokuqala kufuneka sifake iphakheji ye-PVS-Studio kwisistim:

travis_install() {
  if [ "$CXX" = "g++" ]; then
    sudo apt-get install -qq g++-4.8
  fi
  
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    wget -q -O - https://files.viva64.com/etc/pubkey.txt 
      | sudo apt-key add -
    sudo wget -O /etc/apt/sources.list.d/viva64.list 
      https://files.viva64.com/etc/viva64.list  
    
    sudo apt-get update -qq
    sudo apt-get install -qq pvs-studio 
                             libio-socket-ssl-perl 
                             libnet-ssleay-perl
  fi
    
  download_extract 
    "https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz" 
    cmake-3.6.2-Linux-x86_64.tar.gz
}

Ekuqaleni komsebenzi travis_install sifaka abahlanganisi esibafunayo sisebenzisa izinto eziguquguqukayo zokusingqongileyo. Emva koko ukuba i-variable $PVS_ANALYZE ixabiso levenkile Ewe (siyibonisile kwicandelo Env ngexesha lokwakhiwa kwe-matrix), sifaka iphakheji pvs-studio. Ukongeza koku, iipakethe nazo zibonisiwe libio-socket-ssl-perl ΠΈ libnet-ssleay-perl, nangona kunjalo, ziyafuneka kwiziphumo zokuposa, ngoko aziyomfuneko ukuba ukhethe enye indlela yokuhambisa ingxelo yakho.

Umsebenzi download_extract Khuphela kwaye ukhuphe indawo yokugcina ekhankanyiweyo:

download_extract() {
  aria2c -x 16 $1 -o $2
  tar -xf $2
}

Lixesha lokuhlanganisa iprojekthi. Oku kwenzeka kwicandelo elishicilelwe:

travis_script() {
  if [ -d cmake-3.6.2-Linux-x86_64 ]; then
    export PATH=$(pwd)/cmake-3.6.2-Linux-x86_64/bin:$PATH
  fi
  
  CMAKE_ARGS="-DHEADLESS=ON ${CMAKE_ARGS}"
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
  fi
  cmake $CMAKE_ARGS CMakeLists.txt
  make
}

Enyanisweni, olu luqwalaselo olwenziwe lula, ngaphandle kwale migca:

if [ "$PVS_ANALYZE" = "Yes" ]; then
  CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
fi

Kweli candelo lekhowudi simisela cmake iflegi yokuthumela ngaphandle imiyalelo yokuhlanganiswa. Oku kuyimfuneko kwi-static code analyzer. Unokufunda ngakumbi malunga noku kwinqaku elithi "Uyiqhuba njani iPVS-Studio kwiLinux kunye neMacOSΒ«.

Ukuba indibano ibe yimpumelelo, ngoko sifika kuyo emva_kwempumelelo, apho senza uhlalutyo olungatshintshiyo:

travis_after_success() {
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
    pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic 
                                    -o PVS-Studio-${CC}.log 
                                    --disableLicenseExpirationCheck
    
    plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
    sendemail -t [email protected] 
              -u "PVS-Studio $CC report, commit:$TRAVIS_COMMIT" 
              -m "PVS-Studio $CC report, commit:$TRAVIS_COMMIT" 
              -s smtp.gmail.com:587 
              -xu $MAIL_USER 
              -xp $MAIL_PASSWORD 
              -o tls=yes 
              -f $MAIL_USER 
              -a PVS-Studio-${CC}.log PVS-Studio-${CC}.html
  fi
}

Masijonge ngakumbi le migca ilandelayo:

pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic 
                                -o PVS-Studio-${CC}.log 
                                --disableLicenseExpirationCheck
plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html

Umgca wokuqala uvelisa ifayile yelayisenisi ukusuka kwigama lomsebenzisi kunye nesitshixo esisichazileyo kwasekuqaleni xa useka iTravis CI yemo eguquguqukayo.

Umgca wesibini uqala uhlalutyo ngokuthe ngqo. Iflegi -j icwangcisa inani lemisonto yohlalutyo, iflegi -l ibonisa ilayisenisi, iflegi -o ichaza ifayile yeelog ezikhuphayo, kunye neflegi -khubaza iLayisensiExpirationCheck efunekayo kwiinguqulelo zolingo, ukusukela ngokungagqibekanga pvs-studio-analyzer iyakulumkisa umsebenzisi ukuba ilayisenisi sele izakuphelelwa. Ukuthintela oku kungenzeki, ungakhankanya le flegi.

Ifayile yelog iqulethe imveliso ekrwada engenakufundwa ngaphandle kokuguqulwa, ngoko ke kufuneka uqale wenze ifayile ifundeke. Masidlule iinkuni iplagi-converter, kwaye imveliso yifayile ye html.

Kulo mzekelo, ndagqiba ekubeni ndithumele iingxelo ngeposi ndisebenzisa umyalelo thumela i-imeyile.

Ngenxa yoko, sifumene le fayile ilandelayo .travis.sh:

#/bin/bash

travis_before_install() {
  git submodule update --init --recursive
}

download_extract() {
  aria2c -x 16 $1 -o $2
  tar -xf $2
}

travis_install() {
  if [ "$CXX" = "g++" ]; then
    sudo apt-get install -qq g++-4.8
  fi
  
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    wget -q -O - https://files.viva64.com/etc/pubkey.txt 
      | sudo apt-key add -
    sudo wget -O /etc/apt/sources.list.d/viva64.list 
      https://files.viva64.com/etc/viva64.list  
    
    sudo apt-get update -qq
    sudo apt-get install -qq pvs-studio 
                             libio-socket-ssl-perl 
                             libnet-ssleay-perl
  fi
    
  download_extract 
    "https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz" 
    cmake-3.6.2-Linux-x86_64.tar.gz
}
travis_script() {
  if [ -d cmake-3.6.2-Linux-x86_64 ]; then
    export PATH=$(pwd)/cmake-3.6.2-Linux-x86_64/bin:$PATH
  fi
  
  CMAKE_ARGS="-DHEADLESS=ON ${CMAKE_ARGS}"
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
  fi
  cmake $CMAKE_ARGS CMakeLists.txt
  make
}
travis_after_success() {
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
    pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic 
                                    -o PVS-Studio-${CC}.log 
                                    --disableLicenseExpirationCheck
    
    plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
    sendemail -t [email protected] 
              -u "PVS-Studio $CC report, commit:$TRAVIS_COMMIT" 
              -m "PVS-Studio $CC report, commit:$TRAVIS_COMMIT" 
              -s smtp.gmail.com:587 
              -xu $MAIL_USER 
              -xp $MAIL_PASSWORD 
              -o tls=yes 
              -f $MAIL_USER 
              -a PVS-Studio-${CC}.log PVS-Studio-${CC}.html
  fi
}
set -e
set -x

$1;

Ngoku lixesha lokutyhala utshintsho kwindawo yokugcina i-git, emva koko iTravis CI iya kuqhuba ngokuzenzekelayo ukwakha. Cofa kwi "ppsspp" ukuya kwiingxelo zokwakha:

Indlela yokuqwalasela i-PVS-Studio kwiTravis CI usebenzisa umzekelo we-PSP yomdlalo we-console emulator
Siza kubona isishwankathelo solwakhiwo lwangoku:

Indlela yokuqwalasela i-PVS-Studio kwiTravis CI usebenzisa umzekelo we-PSP yomdlalo we-console emulator
Ukuba ukwakhiwa kugqitywe ngempumelelo, siya kufumana i-imeyile eneziphumo zohlalutyo lwe-static. Kakade ke, ukuposa ayikuphela kwendlela yokufumana ingxelo. Unokukhetha nayiphi na indlela yokuphumeza. Kodwa kubalulekile ukukhumbula ukuba emva kokuba ukwakhiwa kugqityiwe, akuyi kuba nako ukufikelela kwiifayile zoomatshini.

Imposiso isishwankathelo

Sigqibe ngempumelelo eyona ndawo inzima. Ngoku masiqinisekise ukuba yonke imigudu yethu ifanelekile. Makhe sijonge amanqaku anomdla avela kwingxelo yohlalutyo olungatshintshiyo oluze kum ngeposi (yayingeyonto endiyibonisileyo).

Ukulungiselela okuyingozi

void sha1( unsigned char *input, int ilen, unsigned char output[20] )
{
  sha1_context ctx;

  sha1_starts( &ctx );
  sha1_update( &ctx, input, ilen );
  sha1_finish( &ctx, output );

  memset( &ctx, 0, sizeof( sha1_context ) );
}

PVS-Studio isilumkiso: V597 Umqokeleli unokucima i 'memset' umsebenzi wokufowuna, osetyenziselwa ukugungxula 'sum' buffer. Umsebenzi we-RtlSecureZeroMemory () kufuneka usetyenziswe ukucima idatha yabucala. sha1.cpp 325

Esi siqwenga sekhowudi sikwimodyuli ekhuselekileyo ye-hashing, nangona kunjalo, iqulethe isiphene sokhuseleko esinzulu (CWE-14). Makhe sijonge kuluhlu lwendibano oluveliswayo xa kusenziwa uguqulelo lweDebug:

; Line 355
  mov r8d, 20
  xor edx, edx
  lea rcx, QWORD PTR sum$[rsp]
  call memset
; Line 356

Yonke into ime ngocwangco kunye nomsebenzi memeset iyenziwa, ngaloo ndlela ibhala ngaphezulu idatha ebalulekileyo kwi-RAM, nangona kunjalo, musa ukuvuya okwangoku. Makhe sijonge kuluhlu lwendibano yenguqulelo yoKhupho ngokulungiselela:

; 354  :
; 355  :  memset( sum, 0, sizeof( sum ) );
; 356  :}

Njengoko kunokubonwa kuluhlu, umqokeleli akawuhoyanga umnxeba memeset. Oku kungenxa yokuba kumsebenzi sha1 emva kwefowuni memeset akusekho kubhekiswa kulwakhiwo ctx. Ke ngoko, umqokeleli akaboni sizathu sokuchitha ixesha leprosesa ebhala ngaphezulu kwememori engasetyenziswanga kwixesha elizayo. Ungalungisa oku ngokusebenzisa umsebenzi RtlSecureZeroMemory okanye ngokufanayo kuye.

Ngokuchanekileyo:

void sha1( unsigned char *input, int ilen, unsigned char output[20] )
{
  sha1_context ctx;

  sha1_starts( &ctx );
  sha1_update( &ctx, input, ilen );
  sha1_finish( &ctx, output );

  RtlSecureZeroMemory(&ctx, sizeof( sha1_context ) );
} 

Uthelekiso olungeyomfuneko

static u32 sceAudioOutputPannedBlocking
             (u32 chan, int leftvol, int rightvol, u32 samplePtr) {
  int result = 0;
  // For some reason, this is the only one that checks for negative.
  if (leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0) {
    ....
  } else {
    if (leftvol >= 0) {
      chans[chan].leftVolume = leftvol;
    }
    if (rightvol >= 0) {
      chans[chan].rightVolume = rightvol;
    }
    chans[chan].sampleAddress = samplePtr;
    result = __AudioEnqueue(chans[chan], chan, true);
  }
}

PVS-Studio isilumkiso: V547 Uvakaliso 'leftvol >= 0' luhlala luyinyani. sceAudio.cpp 120

Nikela ingqalelo kwelinye isebe okokuqala if. Ikhowudi iya kuphunyezwa kuphela ukuba zonke iimeko leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol <0 iya kuba bubuxoki. Ke ngoko, sifumana ezi nkcazo zilandelayo, eziya kuba yinyaniso kwelinye isebe: leftvol <= 0xFFFF, rightvol <= 0xFFFF, leftvol >= 0 ΠΈ rightvol >= 0. Phawula iingxelo ezimbini zokugqibela. Ngaba kunengqiqo ukujonga ukuba yintoni imeko eyimfuneko yokuphunyezwa kwesi siqwenga sekhowudi?

Ke sinokususa ngokukhuselekileyo ezi nkcazo zinemiqathango:

static u32 sceAudioOutputPannedBlocking
(u32 chan, int leftvol, int rightvol, u32 samplePtr) {
  int result = 0;
  // For some reason, this is the only one that checks for negative.
  if (leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0) {
    ....
  } else {
    chans[chan].leftVolume = leftvol;
    chans[chan].rightVolume = rightvol;

    chans[chan].sampleAddress = samplePtr;
    result = __AudioEnqueue(chans[chan], chan, true);
  }
}

Enye imeko. Kukho uhlobo oluthile lwempazamo efihliweyo emva kwezi meko zingafunekiyo. Mhlawumbi abazange bajonge oko kwakufuneka.

Ctrl+C Ctrl+V Ukubetha ngasemva

static u32 scePsmfSetPsmf(u32 psmfStruct, u32 psmfData) {
  if (!Memory::IsValidAddress(psmfData) ||
      !Memory::IsValidAddress(psmfData)) {
    return hleReportError(ME, SCE_KERNEL_ERROR_ILLEGAL_ADDRESS, "bad address");
  }
  ....
}

V501 Kukho amabinzana-magama afanayo afanayo '!Memory::IsValidAddress(psmfData)' ekhohlo nasekunene kwe '||' umsebenzisi. scePsmf.cpp 703

Nika ingqalelo kwitshekhi ngaphakathi if. Awucingi ukuba iyamangalisa into yokuba sijonge ukuba idilesi iyasebenza na? psmfData, ngokuphindwe kabini? Ngoko oku kubonakala kungaqhelekanga kum ... Enyanisweni, oku, ngokuqinisekileyo, i-typo, kwaye ingcamango yayikukujonga zombini iiparameters zokufaka.

Inketho echanekileyo:

static u32 scePsmfSetPsmf(u32 psmfStruct, u32 psmfData) {
  if (!Memory::IsValidAddress(psmfStruct) ||
      !Memory::IsValidAddress(psmfData)) {
    return hleReportError(ME, SCE_KERNEL_ERROR_ILLEGAL_ADDRESS, "bad address");
  }
  ....
}

Uguquguquko olulityelweyo

extern void ud_translate_att(
  int size = 0;
  ....
  if (size == 8) {
    ud_asmprintf(u, "b");
  } else if (size == 16) {
    ud_asmprintf(u, "w");
  } else if (size == 64) {
    ud_asmprintf(u, "q");
  }
  ....
}

PVS-Studio isilumkiso: V547 Inkcazo 'ubungakanani == 8' isoloko ibubuxoki. syn-att.c 195

Le mpazamo ikwisiqulathi seefayili ngaphandle, ngoko ke ayifanelekanga kwiprojekthi, kodwa i-bug yafunyanwa ngaphambi kokuba ndiyiqaphele, ngoko ke ndagqiba ekubeni ndiyishiye. Emva kwayo yonke loo nto, eli nqaku alikho malunga nokuphonononga iimpazamo, kodwa malunga nokudibanisa neTravis CI, kwaye akukho lungelelwaniso lwe-analyzer lwenziwa.

Eyahlukileyo ubungakanani iqalwa ngokuqhubekayo, nangona kunjalo, ayisetyenziswanga konke konke kwikhowudi, ezantsi ukuya kumqhubi if, leyo, ngokuqinisekileyo, inika amanga ngelixa sijonga iimeko, kuba, njengoko sikhumbula, ubungakanani ilingana no-zero. Iitshekhi ezilandelayo nazo azinangqiqo.

Kuyabonakala ukuba, umbhali weqhekeza lekhowudi ulibale ukubhala ngaphezulu ukuguquguquka ubungakanani ngaphambi koko.

Yeka

Apha kulapho siza kuphelela khona ngeempazamo. Injongo yale nqaku kukubonisa umsebenzi we-PVS-Studio kunye neTravis CI, kwaye ungayihlalutyi iprojekthi ngokucokisekileyo. Ukuba ufuna iimpazamo ezinkulu kwaye ezintle ngakumbi, unokuhlala uzincoma apha :).

isiphelo

Ukusebenzisa iinkonzo zewebhu ukwakha iiprojekthi kunye nokuziqhelanisa nohlalutyo olongezelelweyo kukuvumela ukuba ufumane iingxaki ezininzi ngokukhawuleza emva kokudibanisa ikhowudi. Nangona kunjalo, isakhiwo esisodwa singenako ngokwaneleyo, ngoko ukuseta uvavanyo kunye nohlalutyo lwe-static luya kuphucula kakhulu umgangatho wekhowudi.

amakhonkco aluncedo

Indlela yokuqwalasela i-PVS-Studio kwiTravis CI usebenzisa umzekelo we-PSP yomdlalo we-console emulator

Ukuba ufuna ukwabelana ngeli nqaku kunye nabaphulaphuli abathetha isiNgesi, nceda usebenzise ikhonkco lokuguqulela: UMaxim Zvyagintsev. Indlela yokuseta i-PVS-Studio kwiTravis CI usebenzisa umzekelo we-PSP yomdlalo we-console emulator.

umthombo: www.habr.com

Yongeza izimvo