Uyimisa kanjani i-PVS-Studio ku-Travis CI usebenzisa isibonelo sesilingisi sekhonsoli yegeyimu ye-PSP

Uyimisa kanjani i-PVS-Studio ku-Travis CI usebenzisa isibonelo sesilingisi sekhonsoli yegeyimu ye-PSP
I-Travis CI iyisevisi yewebhu esabalalisiwe yokwakha nokuhlola isofthiwe esebenzisa i-GitHub njengokusingatha ikhodi yomthombo. Ngokungeziwe kulezi zimo zokusebenza ezingenhla, ungakwazi ukwengeza ukubonga kwakho ezinkethweni ezibanzi zokumisa. Kulesi sihloko sizolungiselela i-Travis CI ukuthi isebenze ne-PVS-Studio sisebenzisa isibonelo sekhodi ye-PPSSPP.

Isingeniso

I-Travis CI iyisevisi yewebhu yokwakha nokuhlola isofthiwe. Ngokuvamile isetshenziswa ngokuhambisana nezinqubo zokuhlanganisa eziqhubekayo.

I-PPSSPP - I-PSP game console emulator. Uhlelo luyakwazi ukulingisa ukwethulwa kwanoma yimiphi imidlalo kusuka kuzithombe zediski ezihloselwe i-Sony PSP. Uhlelo lukhishwe ngoNovemba 1, 2012. I-PPSSPP ilayisensi ngaphansi kwe-GPL v2. Noma ubani angakwazi ukwenza ngcono ikhodi yomthombo wephrojekthi.

I-PVS-Studio - i-static code analyzer yokusesha amaphutha kanye nokuba sengozini okungenzeka kukhodi yohlelo. Kulesi sihloko, ukuze senze ushintsho, sizokwethula i-PVS-Studio hhayi endaweni emshinini womthuthukisi, kodwa efwini, futhi sibheke amaphutha ku-PPSSPP.

Isetha i-Travis CI

Sizodinga indawo yokugcina ku-GitHub, lapho iphrojekthi esiyidingayo itholakala, kanye nokhiye we-PVS-Studio (ungathola ukhiye wesilingo noma mahhala kumaphrojekthi womthombo ovulekile).

Asiye esizeni I-Travis CI. Ngemva kokugunyazwa usebenzisa i-akhawunti yakho ye-GitHub, sizobona uhlu lwamakhosombe:

Uyimisa kanjani i-PVS-Studio ku-Travis CI usebenzisa isibonelo sesilingisi sekhonsoli yegeyimu ye-PSP
Ukuze kuhlolwe, ngifake i-PPSSPP ngemfoloko.

Senza kusebenze inqolobane esifuna ukuyiqoqa:

Uyimisa kanjani i-PVS-Studio ku-Travis CI usebenzisa isibonelo sesilingisi sekhonsoli yegeyimu ye-PSP
Okwamanje, i-Travis CI ayikwazi ukwakha iphrojekthi yethu ngoba ayikho imiyalelo yokwakha. Ngakho sekuyisikhathi sokumisa.

Ngesikhathi sokuhlaziya, ezinye izinto eziguquguqukayo zizoba usizo kithi, ngokwesibonelo, ukhiye we-PVS-Studio, okungeke kuthandeke ukucaciswa kufayela lokumisa. Ngakho-ke ake sengeze okuguquguqukayo kwemvelo sisebenzisa izilungiselelo zokwakha kuTravis CI:

Uyimisa kanjani i-PVS-Studio ku-Travis CI usebenzisa isibonelo sesilingisi sekhonsoli yegeyimu ye-PSP
Sizodinga:

  • PVS_USERNAME - igama lomsebenzisi
  • PVS_KEY - ukhiye
  • MAIL_USER - i-imeyili ezosetshenziswa ukuthumela umbiko
  • MAIL_PASSWORD - iphasiwedi ye-imeyili

Okubili kokugcina kungokuzithandela. Lezi zizosetshenziselwa ukuthumela imiphumela ngemeyili. Uma ufuna ukusabalalisa umbiko ngenye indlela, awudingi ukubakhombisa.

Ngakho-ke, sengeze okuguquguqukayo kwemvelo esikudingayo:

Uyimisa kanjani i-PVS-Studio ku-Travis CI usebenzisa isibonelo sesilingisi sekhonsoli yegeyimu ye-PSP
Manje ake sakhe ifayela .travis.yml futhi uyibeke kumsuka wephrojekthi. I-PPSSPP isivele inefayela lokumisa le-Travis CI, nokho, lalilikhulu kakhulu futhi lingasifanelekeli nhlobo isibonelo, ngakho kwakudingeka siyenze ibe lula kakhulu futhi sishiye izakhi eziyisisekelo kuphela.

Okokuqala, ake sikhombise ulimi, inguqulo ye-Ubuntu Linux esifuna ukuyisebenzisa emshinini obonakalayo, namaphakheji adingekayo wokwakha:

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'

Wonke amaphakheji asohlwini adingeka ku-PPSSPP kuphela.

Manje sibonisa i-matrix yomhlangano:

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

Okuncane mayelana nesigaba Matrix. Ku-Travis CI, kunezindlela ezimbili zokudala izinketho zokwakha: eyokuqala iwukuba ucacise uhlu lwabahlanganisi, izinhlobo zesistimu yokusebenza, okuguquguqukayo kwemvelo, njll., ngemva kwalokho i-matrix yazo zonke izinhlanganisela ezingenzeka ikhiqizwa; okwesibili kuyinkomba ecacile ye-matrix. Vele, ungahlanganisa lezi zindlela ezimbili bese wengeza icala eliyingqayizivele, noma, ngokuphambene nalokho, ungalifaki usebenzisa isigaba. ungafaki. Ungafunda kabanzi ngalokhu ku Travis CI imibhalo.

Okusele ukuhlinzeka ngemiyalo yomhlangano eqondene nephrojekthi:

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

I-Travis CI ikuvumela ukuthi ungeze imiyalo yakho ngezigaba ezahlukahlukene zempilo yomshini obonakalayo. Ingxenye ngaphambi_ukufaka ikhishwe ngaphambi kokufaka amaphakheji. Khona-ke Faka, okulandela ukufakwa kwamaphakheji ohlwini i-addons.aptesikukhombise ngenhla. Umhlangano ngokwawo wenzeka phakathi iskripthi. Uma konke kuhambe kahle, sizithola sesingenile ngemva_kwempumelelo (kulesi sigaba lapho sizosebenzisa khona ukuhlaziya okumile). Lezi akuzona zonke izinyathelo ezingashintshwa, uma udinga okwengeziwe, kufanele ubheke Travis CI imibhalo.

Ukuze kube lula ukufunda, imiyalo yafakwa kumbhalo ohlukile .travis.sh, okubekwa empandeni yephrojekthi.

Ngakho sinefayela elilandelayo .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 amaphakheji, sizobuyekeza ama-submodule. Lokhu kuyadingeka ukuze kwakhiwe i-PPSSPP. Ake sengeze umsebenzi wokuqala ku .travis.sh (qaphela isandiso):

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

Manje siza ngqo ekusetheni ukwethulwa okuzenzakalelayo kwe-PVS-Studio kuTravis CI. Okokuqala sidinga ukufaka iphakheji ye-PVS-Studio ohlelweni:

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 ama-compilers esiwadingayo sisebenzisa okuguquguqukayo kwemvelo. Khona-ke uma okuguquguqukayo $PVS_ANALYZE inani lezitolo Yebo (sikukhombisile esigabeni env ngesikhathi sokwakhiwa kwe-matrix), sifaka iphakheji pvs-studio. Ngaphezu kwalokhu, amaphakheji nawo ayaboniswa libio-socket-ssl-perl ΠΈ i-libnet-ssleay-perl, nokho, ayadingeka emiphumeleni yokuposa, ngakho azidingeki uma ukhethe enye indlela yokuletha umbiko wakho.

Umsebenzi download_khipha ukulanda nokukhipha ingobo yomlando eshiwo:

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

Isikhathi sokuhlanganisa iphrojekthi. Lokhu kwenzeka esigabeni iskripthi:

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
}

Eqinisweni, lokhu ukucushwa koqobo okwenziwe lula, ngaphandle kwale migqa:

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

Kulesi sigaba sekhodi sizibekele cmake hlaba umkhosi ngokuthekelisa imiyalo yokuhlanganiswa. Lokhu kuyadingeka ku-static code analyzer. Ungafunda kabanzi ngalokhu esihlokweni esithi β€œUngayisebenzisa kanjani i-PVS-Studio ku-Linux naku-macOS".

Uma umhlangano uphumelele, khona-ke siyafika ngemva_kwempumelelo, lapho senza ukuhlaziya okumile:

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
}

Ake sibhekisise imigqa elandelayo:

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

Umugqa wokuqala ukhiqiza ifayela lelayisense egameni lomsebenzisi nokhiye esiwushilo ekuqaleni lapho sisetha okuguquguqukayo kwemvelo ye-Travis CI.

Umugqa wesibili uqala ukuhlaziya ngqo. Flag -j ibeka inani lemicu ukuze ihlaziywe, ifulegi -l ikhombisa ilayisense, ifulege -o ichaza ifayela lokukhipha izingodo, kanye nefulegi -khubazaIlayisensiYokuphelelwa yisikhathiUkuhlola edingekayo ezinguqulweni zesilingo, kusukela ngokuzenzakalelayo pvs-studio-analyzer izoxwayisa umsebenzisi ukuthi ilayisensi isizophelelwa yisikhathi. Ukuze uvimbele lokhu ukuthi kungenzeki, ungacacisa leli fulegi.

Ifayela lokungena liqukethe okukhiphayo okungaphekiwe okungenakufundeka ngaphandle kokuguqulwa, ngakho kufanele uqale wenze ifayela lifundeke. Masidlule izingodo isiguquli sepulagi, futhi okukhiphayo kuyifayela le-html.

Kulesi sibonelo, nginqume ukuthumela imibiko ngeposi ngisebenzisa umyalo i-sendmail.

Ngenxa yalokho, sithole ifayela elilandelayo .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;

Manje sekuyisikhathi sokucindezela izinguquko endaweni yokugcina ye-git, ngemuva kwalokho i-Travis CI izosebenzisa ngokuzenzakalelayo ukwakhiwa. Chofoza ku-"ppsspp" ukuze uye emibikweni yokwakha:

Uyimisa kanjani i-PVS-Studio ku-Travis CI usebenzisa isibonelo sesilingisi sekhonsoli yegeyimu ye-PSP
Sizobona isifinyezo sesakhiwo samanje:

Uyimisa kanjani i-PVS-Studio ku-Travis CI usebenzisa isibonelo sesilingisi sekhonsoli yegeyimu ye-PSP
Uma isakhiwo siqedwa ngempumelelo, sizothola i-imeyili enemiphumela yokuhlaziywa okumile. Yebo, ukuthunyelwa kweposi akuyona ukuphela kwendlela yokuthola umbiko. Ungakhetha noma iyiphi indlela yokusebenzisa. Kodwa kubalulekile ukukhumbula ukuthi ngemva kokuqedwa kokwakhiwa, ngeke kwenzeke ukufinyelela kumafayela omshini we-virtual.

Isifinyezo sephutha

Siqede ngempumelelo ingxenye enzima kakhulu. Manje asiqinisekise ukuthi yonke imizamo yethu ikufanele. Ake sibheke amaphuzu athakazelisayo avela embikweni wokuhlaziya okumile oweza kimi ngeposi (akuzange ngikubonise ngeze).

Ukwenza kahle 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 ) );
}

Isexwayiso se-PVS-Studio: V597 Umhlanganisi angasusa umsebenzi wekholi ye-'memset', esetshenziselwa ukususa i-'sum' buffer. Umsebenzi we-RtlSecureZeroMemory() kufanele usetshenziselwe ukusula idatha eyimfihlo. sha1.cpp 325

Lolu cezu lwekhodi lutholakala kumojula ye-hashing evikelekile, nokho, luqukethe iphutha elikhulu lokuphepha (CWE-14). Ake sibheke uhlu lomhlangano olukhiqizwa lapho kuhlanganiswa inguqulo ye-Debug:

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

Konke kuhlelekile kanye nomsebenzi i-memset iyabulawa, ngaleyo ndlela ibhala ngaphezulu idatha ebalulekile ku-RAM, nokho, ungajabuli okwamanje. Ake sibheke uhlu oluhlanganisiwe lwenguqulo ekhishiwe ngokulungiselela:

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

Njengoba kubonakala ohlwini, umdidiyeli uzibe ucingo i-memset. Lokhu kungenxa yokuthi emsebenzini sha1 ngemva kocingo i-memset akusekho ukubhekisela kusakhiwo ctx. Ngakho-ke, umdidiyeli akaboni sizathu sokumosha isikhathi sokucubungula ukubhala phezu kwememori engasetshenziswa ngokuzayo. Ungalungisa lokhu ngokusebenzisa umsebenzi I-RtlSecureZeroMemory noma ngokufanayo kuye.

Ngokuqondile:

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 ) );
} 

Ukuqhathanisa okungadingekile

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);
  }
}

Isexwayiso se-PVS-Studio: V547 Inkulumo ethi 'leftvol >= 0' ihlale iyiqiniso. sceAudio.cpp 120

Naka elinye igatsha okokuqala if. Ikhodi izokwenziwa kuphela uma zonke izimo leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || I-rightvol <0 kuzovela kungamanga. Ngakho-ke, sithola izitatimende ezilandelayo, ezizoba yiqiniso kwelinye igatsha: leftvol <= 0xFFFF, rightvol <= 0xFFFF, leftvol >= 0 ΠΈ I-rightvol > = 0. Phawula izitatimende ezimbili zokugcina. Ingabe kunengqondo ukuhlola ukuthi yisiphi isimo esidingekayo ukuze kusetshenziswe lesi siqeshana sekhodi?

Ngakho-ke singasusa ngokuphephile lezi zitatimende ezinemibandela:

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);
  }
}

Esinye isimo. Kukhona uhlobo oluthile lwephutha olufihliwe ngemuva kwalezi zimo ezingafuneki. Mhlawumbe abazange bahlole ukuthi yini edingekayo.

U-Ctrl+C U-Ctrl+V Uhlasela Emuva

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 Kukhona izinkulumo ezincanyana ezifanayo '!Memory::IsValidAddress(psmfData)' kwesokunxele nakwesokudla se-'||' opharetha. scePsmf.cpp 703

Naka isheke elingaphakathi if. Awucabangi ukuthi kuyamangaza ukuthi sihlole ukuthi ikheli livumelekile yini? psmfData, okuphindwe kabili? Ngakho-ke lokhu kubonakala kungavamile kimi... Eqinisweni, lokhu, yiqiniso, iphutha, futhi umqondo wawuwukuhlola kokubili imingcele yokufaka.

Inketho elungile:

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

Okuguquguqukayo okukhohliwe

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");
  }
  ....
}

Isexwayiso se-PVS-Studio: V547 Inkulumo ethi 'size == 8' ingamanga njalo. syn-att.c 195

Leli phutha litholakala kufolda ext, ngakho-ke akubalulekile ngempela kuphrojekthi, kodwa isiphazamisi satholwa ngaphambi kokuba ngisiqaphele, ngakho nganquma ukusishiya. Phela, lesi sihloko asikho mayelana nokubuyekeza amaphutha, kodwa mayelana nokuhlanganiswa ne-Travis CI, futhi akukho ukucushwa kwe-analyzer okwenziwe.

Iyaguquguquka usayizi iqalwa ngokungaguquki, nokho, ayisetshenziswa nhlobo kukhodi, kuya phansi ku-opharetha if, okuyinto, yebo, enikeza bamanga ngenkathi sibheka izimo, ngoba, njengoba sikhumbula, usayizi ilingana noziro. Ukuhlola okulandelayo nakho akunangqondo.

Ngokusobala, umbhali wesiqeshana sekhodi ukhohlwe ukubhala phezu kokuhluka usayizi ngaphambi kwalokho.

Misa

Yilapho cishe sizogcina khona ngamaphutha. Inhloso yalesi sihloko ukukhombisa umsebenzi we-PVS-Studio kanye ne-Travis CI, hhayi ukuhlaziya iphrojekthi ngokucophelela ngangokunokwenzeka. Uma ufuna amaphutha amakhulu futhi amahle kakhulu, ungawancoma njalo lapha :).

isiphetho

Ukusebenzisa izinsiza zewebhu ukwakha amaphrojekthi kanye nomkhuba wokuhlaziya okukhulayo kukuvumela ukuthi uthole izinkinga eziningi ngokushesha ngemva kokuhlanganisa ikhodi. Kodwa-ke, isakhiwo esisodwa singase singanele, ngakho-ke ukusetha ukuhlolwa kanye nokuhlaziywa okumile kuzothuthukisa kakhulu ikhwalithi yekhodi.

Izixhumanisi eziwusizo

Uyimisa kanjani i-PVS-Studio ku-Travis CI usebenzisa isibonelo sesilingisi sekhonsoli yegeyimu ye-PSP

Uma ufuna ukwabelana ngalesi sihloko nezithameli ezikhuluma isiNgisi, sicela usebenzise isixhumanisi sokuhumusha: UMaxim Zvyagintsev. Uyisetha kanjani i-PVS-Studio kuTravis CI usebenzisa isibonelo se-PSP game console emulator.

Source: www.habr.com

Engeza amazwana