Mokhoa oa ho lokisa PVS-Studio ho Travis CI u sebelisa mohlala oa emulator ea papali ea papali ea PSP

Mokhoa oa ho lokisa PVS-Studio ho Travis CI u sebelisa mohlala oa emulator ea papali ea papali ea PSP
Travis CI ke ts'ebeletso e ajoang ea webo bakeng sa ho aha le ho etsa liteko software e sebelisang GitHub joalo ka mohloli oa khoutu ea mohloli. Ntle le maemo a kaholimo a ts'ebetso, o ka eketsa liteboho tsa hau ho likhetho tse pharalletseng tsa tlhophiso. Sehloohong sena re tla lokisa Travis CI ho sebetsa le PVS-Studio ho sebelisa mohlala oa khoutu ea PPSSPP.

Selelekela

Travis C.I. ke ts'ebeletso ea webo ea ho aha le ho etsa liteko tsa software. Hangata e sebelisoa hammoho le mekhoa e tsoelang pele ea ho kopanya.

PPSSPP - Emulator ea papali ea papali ea PSP. Lenaneo le khona ho etsisa ho qalisoa ha lipapali leha e le life ho tloha litšoantšong tsa disk tse reretsoeng Sony PSP. Lenaneo le ile la lokolloa ka la 1 Pulungoana 2012. PPSSPP e na le laesense tlasa GPL v2. Mang kapa mang a ka etsa lintlafatso ho khoutu ea mohloli oa morero.

Studio-PVS - static code analyzer bakeng sa ho batla liphoso le bofokoli bo ka bang teng ho khoutu ea lenaneo. Sehloohong sena, bakeng sa phetoho, re tla qala PVS-Studio eseng sebakeng sa heno mochine oa moqapi, empa ka leru, 'me re shebe liphoso ho PPSSPP.

Ho theha Travis CI

Re tla hloka polokelo ho GitHub, moo projeke eo re e hlokang e leng teng, hammoho le senotlolo sa PVS-Studio (o ka e fumana. senotlolo sa teko kapa mahala bakeng sa merero ea Open Source).

Ha re ee setšeng Travis C.I.. Kamora tumello ea ho sebelisa ak'haonte ea hau ea GitHub, re tla bona lenane la polokelo:

Mokhoa oa ho lokisa PVS-Studio ho Travis CI u sebelisa mohlala oa emulator ea papali ea papali ea PSP
Bakeng sa tlhahlobo, ke ferekane PPSSPP.

Re kenya sebaka sa polokelo seo re batlang ho se bokella:

Mokhoa oa ho lokisa PVS-Studio ho Travis CI u sebelisa mohlala oa emulator ea papali ea papali ea PSP
Hona joale, Travis CI e ke ke ea haha ​​​​morero oa rona hobane ha ho na litaelo tsa ho haha. Kahoo ke nako ea tlhophiso.

Nakong ea tlhahlobo, mefuta e meng e tla ba molemo ho rona, mohlala, senotlolo sa PVS-Studio, e leng ho ke keng ha e-ba molemo ho hlakisa faeleng ea tlhophiso. Kahoo ha re kenyelleng mefuta e fapaneng ea tikoloho re sebelisa litlhophiso tsa kaho ho Travis CI:

Mokhoa oa ho lokisa PVS-Studio ho Travis CI u sebelisa mohlala oa emulator ea papali ea papali ea PSP
Re tla hloka:

  • PVS_USERNAME - lebitso la mosebelisi
  • PVS_KEY - senotlolo
  • MAIL_USER - lengolo-tsoibila le tla sebelisoa ho romella tlaleho
  • MAIL_PASSWORD - lengolo-tsoibila la lengolo-tsoibila

Tse peli tsa ho qetela ke tsa boikhethelo. Tsena li tla sebelisoa ho romella liphetho ka lengolo-tsoibila. Haeba u batla ho aba tlaleho ka tsela e 'ngoe, ha ho hlokahale hore u li bontše.

Kahoo, re ekelitse mefuta e fapaneng ea tikoloho eo re e hlokang:

Mokhoa oa ho lokisa PVS-Studio ho Travis CI u sebelisa mohlala oa emulator ea papali ea papali ea PSP
Joale ha re theheng faele .travis.yml ebe u e beha motsong oa morero. PPSSPP e ne e se e ntse e e-na le faele ea tlhophiso bakeng sa Travis CI, leha ho le joalo, e ne e le khōlō haholo ebile e sa tšoanelehe ka ho feletseng bakeng sa mohlala, kahoo re ne re tlameha ho e nolofatsa haholo mme re siee lintlha tsa motheo feela.

Taba ea pele, ha re bonts'e puo, mofuta oa Ubuntu Linux oo re batlang ho o sebelisa mochining o fumanehang, le liphutheloana tse hlokahalang bakeng sa moaho:

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'

Liphutheloana tsohle tse thathamisitsoeng li hlokahala bakeng sa PPSSPP feela.

Joale re bonts'a matrix a kopano:

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

Ho feta hanyane ka karolo matrix. Ho Travis CI, ho na le mekhoa e 'meli ea ho etsa likhetho tsa ho haha: ea pele ke ho hlalosa lethathamo la lihlopha, mefuta ea tsamaiso ea tsamaiso, mefuta-futa ea tikoloho, joalo-joalo, ka mor'a moo ho hlahisoa matrix a metsoako eohle e ka khonehang; ea bobeli ke pontšo e hlakileng ea matrix. Ehlile, o ka kopanya mekhoa ena e 'meli mme oa eketsa nyeoe e ikhethang, kapa, ho fapana le hoo, o e qhelele ka thoko ho sebelisa karolo. kenyeletsa. U ka bala haholoanyane ka sena ho Litokomane tsa Travis CI.

Ho setseng ke ho fana ka litaelo tse ikhethileng tsa morero:

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

Travis CI e u lumella ho eketsa litaelo tsa hau bakeng sa mekhahlelo e fapaneng ea bophelo ba mochini o sebetsang. Karolo pele_kenya e etsoa pele o kenya liphutheloana. Joale kenya, e latelang ho kenngoa ha liphutheloana ho tsoa lethathamong addons.apteo re e bontšitseng ka holimo. Kopano ka boeona e ba teng rx. Haeba tsohle li tsamaile hantle, joale re tla iphumana re kene kamora_katleho (ke karolong ena moo re tla tsamaisa static analysis). Tsena ha se mehato eohle e ka fetoloang, haeba u hloka ho feta, u lokela ho sheba ho eona Litokomane tsa Travis CI.

Bakeng sa ho bala habonolo, litaelo li ne li kenngoa ka har'a script e arohaneng .travis.sh, e behiloeng motsong oa morero.

Kahoo re na le faele e latelang .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

Pele re kenya liphutheloana, re tla ntlafatsa li-submodules. Sena sea hlokahala ho aha PPSSPP. Ha re kenye tšebetsong ea pele ho .travis.sh (hlokomela katoloso):

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

Hona joale re tla ka kotloloho ho theha tlhahiso ea othomathike ea PVS-Studio ho Travis CI. Pele re hloka ho kenya sephutheloana sa PVS-Studio ho sistimi:

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
}

Qalong ea mosebetsi travis_install re kenya li-compilers tseo re li hlokang re sebelisa mefuta-futa ea tikoloho. Joale haeba ho feto-fetoha $PVS_ANALYZE boleng ba mabenkele E (re e bontšitse karolong romeletsa nakong ea tlhophiso ea matrix), re kenya sephutheloana pvs-setudio. Ho phaella ho sena, liphutheloana li boetse li bontšoa libio-socket-ssl-perl и libnet-ssleay-perl, leha ho le joalo, lia hlokahala bakeng sa liphetho tsa poso, kahoo ha li hlokahale haeba u khethile mokhoa o mong oa ho fana ka tlaleho ea hau.

Mosebetsi download_extract khoa le ho notlolla polokelong e boletsoeng:

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

Ke nako ea ho kopanya morero. Sena se etsahala karolong rx:

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
}

Ebile, ena ke tlhophiso e nolofalitsoeng ea mantlha, ntle le mela ena:

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

Karolong ena ea khoutu re beha bakeng sa cmeke folakha bakeng sa ho romela litaelo tsa pokello. Sena sea hlokahala bakeng sa static code analyzer. U ka bala haholoanyane ka sena sehloohong "Mokhoa oa ho tsamaisa PVS-Studio ho Linux le macOS".

Haeba kopano e ile ea atleha, joale re tla kamora_katleho, moo re etsang tlhahlobo e tsitsitseng:

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
}

Ha re shebeng mela e latelang ka botebo:

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

Mohala oa pele o hlahisa faele ea laesense ho tsoa ho lebitso la mosebelisi le senotlolo seo re se boletseng qalong ha re theha mefuta e fapaneng ea tikoloho ea Travis CI.

Mohala oa bobeli o qala tlhahlobo ka kotloloho. Folakha -j e beha palo ea likhoele bakeng sa tlhahlobo, folakha -l e bontša laesense, folakha -o e hlalosa faele bakeng sa ho hlahisa likutu, le folakha -disableLicenseExpirationCheck e hlokahalang bakeng sa liphetolelo tsa teko, kaha ka ho sa feleng pvs-studio-analyzer e tla lemosa mosebedisi hore laesense e haufi le ho fela. Ho thibela sena ho etsahala, o ka hlakisa folakha ena.

Faele ea log e na le tlhahiso e tala e ke keng ea baloa ntle le ho sokoloha, kahoo o tlameha ho qala ho etsa hore faele e balehe. Ha re feteng likutung mofetoheli oa pola, mme sephetho ke faele ea html.

Mohlala ona, ke nkile qeto ea ho romela litlaleho ka poso ke sebelisa taelo romelaemail.

Ka lebaka leo, re fumane faele e latelang .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;

Joale ke nako ea ho sutumelletsa liphetoho sebakeng sa polokelo ea git, kamora moo Travis CI e tla tsamaisa moaho ka bo eona. Tobetsa ho "ppsspp" ho ea litlalehong tsa kaho:

Mokhoa oa ho lokisa PVS-Studio ho Travis CI u sebelisa mohlala oa emulator ea papali ea papali ea PSP
Re tla bona kakaretso ea moaho oa hajoale:

Mokhoa oa ho lokisa PVS-Studio ho Travis CI u sebelisa mohlala oa emulator ea papali ea papali ea PSP
Haeba moaho o phethiloe ka katleho, re tla fumana lengolo-tsoibila le nang le liphetho tsa tlhahlobo e tsitsitseng. Ke ’nete hore ho romela mangolo hase eona feela tsela ea ho fumana tlaleho. U ka khetha mokhoa ofe kapa ofe oa ts'ebetsong. Empa ke habohlokoa ho hopola hore ka mor'a hore mohaho o phethoe, ho ke ke ha khoneha ho fumana lifaele tsa mochine oa sebele.

Kakaretso ea phoso

Re phethile ka katleho karolo e thata ka ho fetisisa. Joale a re tiiseng hore boiteko bohle boo re bo etsang ke ba bohlokoa. A re shebeng lintlha tse ling tse thahasellisang tse tsoang tlalehong ea static analysis e ileng ea tla ho 'na ka poso (e ne e se lefeela leo ke le bontšitseng).

Ntlafatso e kotsi

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

Tlhokomeliso ea PVS-Studio: V597 Moqapi a ka hlakola mohala oa tšebetso oa 'memset', o sebelisetsoang ho hlakola buffer ea 'sum'. Mosebetsi oa RtlSecureZeroMemory() o lokela ho sebelisoa ho hlakola lintlha tsa lekunutu. sha1.cpp 325

Karolo ena ea khoutu e ka har'a module ea hashing e sireletsehileng, leha ho le joalo, e na le phoso e tebileng ea ts'ireletso (CWE-14). Ha re shebeng lethathamo la kopano le hlahisoang ha ho etsoa mofuta oa Debug:

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

Ntho e 'ngoe le e 'ngoe e hlophisitsoe le mosebetsi memeset e phethiloe, ka hona e hlakola data ea bohlokoa ho RAM, leha ho le joalo, u se ke ua thaba hajoale. Ha re shebeng lethathamo la kopano ea mofuta oa Release ka optimization:

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

Joalo ka ha ho bonoa lethathamong, moqapi o ile a iphapanyetsa mohala memeset. Sena se bakoa ke taba ea hore tšebetsong sha1 ka mora mohala memeset ha ho sa buuoa ka sebopeho ctx. Ka hona, moqapi ha a bone bohlokoa ba ho senya nako ea processor ho ngola mohopolo o sa sebelisoeng nakong e tlang. U ka lokisa sena ka ho sebelisa ts'ebetso RtlSecureZeroMemory kapa joalo ho yena.

E nepahetse:

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

Papiso e sa hlokahaleng

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

Tlhokomeliso ea PVS-Studio: V547 Polelo 'leftvol >= 0' e lula e le 'nete. sceAudio.cpp 120

Ela hloko lekala le leng bakeng sa pele if. Khoutu e tla etsoa feela haeba maemo ohle leftvol > 0xFFFF || rightvol> 0xFFFF || leftvol < 0 || rightvol <0 e tla fetoha leshano. Ka hona, re fumana lipolelo tse latelang, tse tla ba 'nete bakeng sa lekala le leng: leftvol <= 0xFFFF, rightvol <= 0xFFFF, leftvol >= 0 и rightvol>= 0. Hlokomela lipolelo tse peli tsa ho qetela. Na hoa utloahala ho hlahloba hore na ke boemo bofe bo hlokahalang bakeng sa ho phethahatsa karolo ee ea khoutu?

Kahoo re ka tlosa lipolelo tsena ka mokhoa o sireletsehileng:

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

Boemo bo bong. Ho na le mofuta o itseng oa phoso o patiloeng ka mor'a maemo ana a sa hlokahaleng. Mohlomong ha baa ka ba hlahloba hore na ho hlokahala eng.

Ctrl+C Ctrl+V E Hlasela Morao

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 Ho na le mengolo e ts'oanang e reng '!Memory::IsValidAddress(psmfData)' ka ho le letšehali le ka ho le letona la '||' mosebeletsi. scePsmf.cpp 703

Ela hloko cheke ka hare if. Na ha u nahane hore hoa makatsa hore ebe re hlahloba hore na aterese e nepahetse? psmfData, ho feta habeli? Kahoo sena se bonahala se makatsa ho 'na ... Ha e le hantle, sena ke, ha e le hantle, ke typo, 'me khopolo e ne e le ho hlahloba likarolo tse peli tsa ho kenya letsoho.

Khetho e nepahetseng:

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

Phetoho e lebetsoeng

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

Tlhokomeliso ea PVS-Studio: V547 Polelo 'size == 8' e lula e le leshano. syn-att.c 195

Phoso ena e fumaneha ka har'a sephutheli ho hang, kahoo ha e hlile ha e amane le morero, empa kokoana e ile ea fumanoa pele ke e hlokomela, kahoo ke ile ka etsa qeto ea ho e tlohela. Ntle le moo, sengoloa sena ha se mabapi le ho hlahloba liphoso, empa mabapi le ho kopanngoa le Travis CI, mme ha ho na tlhophiso ea mohlahlobi e entsoeng.

E fapaneng boholo e qalisoa ke kamehla, leha ho le joalo, ha e sebelisoe ho hang ka khoutu, ho fihlela ho opareitara if, eo, ha e le hantle, e fanang ka eona bohata ha re ntse re hlahloba maemo, hobane, joalo ka ha re hopola, boholo lekana le zero. Licheke tse latelang le tsona ha li na kelello.

Kamoo ho bonahalang kateng, mongoli oa sekhechana sa khoutu o lebetse ho hlakola phapang boholo pele ho moo.

Ema

Mona ke moo mohlomong re tla qetella ka liphoso. Morero oa sengoloa sena ke ho bonts'a mosebetsi oa PVS-Studio hammoho le Travis CI, eseng ho sekaseka morero ka botlalo kamoo ho ka khonehang. Haeba u batla liphoso tse kholoanyane le tse ntle, u ka li rata kamehla mona :)

fihlela qeto e

Ho sebelisa lits'ebeletso tsa marang-rang ho aha merero hammoho le tloaelo ea tlhahlobo e ntseng e eketseha ho u lumella ho fumana mathata a mangata hang kamora ho kopanya khoutu. Leha ho le joalo, mohaho o le mong o ka 'na oa se ke oa lekana, kahoo ho theha tlhahlobo hammoho le tlhahlobo e tsitsitseng ho tla ntlafatsa haholo boleng ba khoutu.

likhokahano tse sebetsang

Mokhoa oa ho lokisa PVS-Studio ho Travis CI u sebelisa mohlala oa emulator ea papali ea papali ea PSP

Haeba u batla ho arolelana sengoloa sena le bamameli ba buang Senyesemane, ka kopo sebelisa sehokelo sa phetolelo: Maxim Zvyagintsev. Mokhoa oa ho theha PVS-Studio ho Travis CI u sebelisa mohlala oa emulator ea papali ea papali ea PSP.

Source: www.habr.com

Eketsa ka tlhaloso