Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI amin'ny fampiasana ny emulator PSP ho ohatra

Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI amin'ny fampiasana ny emulator PSP ho ohatra
Travis CI dia serivisy tranonkala mizara ho an'ny fananganana sy fitsapana rindrambaiko izay mampiasa GitHub ho fampiantranoana kaody loharano. Ho fanampin'ireo toe-javatra miasa etsy ambony, azonao atao ny manampy ny fisaorana anao manokana amin'ny safidy fanitsiana be dia be. Amin'ity lahatsoratra ity dia hamboarina Travis CI hiara-miasa amin'ny PVS-Studio amin'ny fampiasana ny ohatra kaody PPSSPP.

fampidirana

Travis C.I. dia serivisy tranonkala ho an'ny fananganana sy fitiliana rindrambaiko. Matetika izy io no ampiasaina miaraka amin'ny fomba fampidirana mitohy.

PPSSPP - PSP lalao console emulator. Ny programa dia afaka maka tahaka ny fandefasana lalao rehetra avy amin'ny sary kapila natao ho an'ny Sony PSP. Navoaka tamin’ny 1 Novambra 2012 ilay fandaharana. PPSSPP dia nahazo alalana tamin'ny GPL v2. Afaka manao fanatsarana ny tsirairay kaody loharanon'ny tetikasa.

PVS Studio - mpanadihady kaody static amin'ny fitadiavana lesoka sy ny mety ho vulnerability amin'ny code program. Amin'ity lahatsoratra ity, ho an'ny fanovana, dia hanomboka ny PVS-Studio tsy eo an-toerana amin'ny milina mpamorona, fa amin'ny rahona, ary hitady lesoka ao amin'ny PPSSPP.

Fametrahana Travis CI

Mila tahiry ao amin'ny GitHub isika, izay misy ny tetikasa ilaintsika, ary koa ny lakile ho an'ny PVS-Studio (afaka mahazo fanalahidin'ny fitsarana na maimaim-poana ho an'ny tetikasa Open Source).

Andao ho any amin'ny tranokala Travis C.I.. Aorian'ny fanomezan-dΓ lana amin'ny fampiasana ny kaontinao GitHub dia hahita lisitr'ireo tahiry izahay:

Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI amin'ny fampiasana ny emulator PSP ho ohatra
Ho an'ny fitsapana, dia nitsambikina ny PPSSPP aho.

Mavitrika ny tahiry izay tiantsika angonina:

Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI amin'ny fampiasana ny emulator PSP ho ohatra
Amin'izao fotoana izao, Travis CI dia tsy afaka manangana ny tetikasanay satria tsy misy toromarika momba ny fananganana. Noho izany dia tonga ny fotoana hanaovana configuration.

Mandritra ny famakafakana dia mety hahasoa antsika ny variables sasany, ohatra, ny lakile ho an'ny PVS-Studio, izay tsy tiana holazaina amin'ny rakitra fanamafisana. Andao Γ ry hanampy ny fari-piainan'ny tontolo iainana amin'ny alΓ lan'ny fananganana fananganana ao amin'ny Travis CI:

Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI amin'ny fampiasana ny emulator PSP ho ohatra
Mila izany isika:

  • PVS_USERNAME - solonanarana
  • PVS_KEY - fanalahidy
  • MAIL_USER - mailaka ampiasaina handefasana ny tatitra
  • MAIL_PASSWORD - tenimiafina mailaka

Ny roa farany dia tsy voatery. Ireo dia hampiasaina handefasana valiny amin'ny mailaka. Raha te hizara ny tatitra amin'ny fomba hafa ianao dia tsy mila manondro azy ireo.

Noho izany, nampianay ny fari-piainan'ny tontolo iainana ilaintsika:

Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI amin'ny fampiasana ny emulator PSP ho ohatra
Andeha isika hamorona rakitra .travis.yml ary apetraho eo amin'ny fototry ny tetikasa izany. Ny PPSSPP dia efa nanana fisie fanamafisam-peo ho an'ny Travis CI, na izany aza, lehibe loatra izy io ary tsy mety amin'ny ohatra, ka tsy maintsy nanatsotra azy io izahay ary namela ireo singa fototra ihany.

Voalohany, andeha hojerentsika ny fiteny, ny dikan-tenin'ny Ubuntu Linux izay tiantsika hampiasaina amin'ny milina virtoaly, ary ny fonosana ilaina amin'ny fananganana:

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'

Ny fonosana rehetra voatanisa dia ilaina manokana ho an'ny PPSSPP.

Izao dia manondro ny matrix assembly:

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

Miresaka bebe kokoa momba ny fizarana teraka. Ao amin'ny Travis CI, misy fomba roa hamoronana safidy fananganana: ny voalohany dia ny mamaritra ny lisitry ny mpamoron-javatra, ny karazana rafitra miasa, ny fari-piainan'ny tontolo iainana, sns., ary avy eo ny matrix amin'ny fitambarana rehetra azo atao; ny faharoa dia famantarana mazava ny matrix. Mazava ho azy, azonao atao ny manambatra ireo fomba roa ireo ary manampy tranga tsy manam-paharoa, na, mifanohitra amin'izany, manilika izany amin'ny fampiasana ny fizarana manilika. Afaka mamaky bebe kokoa momba izany ianao ao amin'ny Travis CI documentation.

Ny hany sisa tavela dia ny manome torolΓ lana momba ny fivoriambe manokana:

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 dia ahafahanao manampy ny baikonao manokana amin'ny dingana isan-karazany amin'ny fiainan'ny milina virtoaly. Faritra before_install novonoina alohan'ny fametrahana fonosana. dia hametraka, izay manaraka ny fametrahana fonosana avy amin'ny lisitra addons.aptizay voalazanay etsy ambony. Ny fivoriambe mihitsy no atao ao teny. Raha nandeha tsara ny zava-drehetra dia ho ao anatin'izany isika aorian_fahombiazana (Ao amin'ity fizarana ity no hanaovana fanadihadiana static). Tsy ireo dingana rehetra ireo no azo ovaina, raha mila bebe kokoa ianao dia tokony hijery Travis CI documentation.

Ho fanamorana ny famakiana dia napetraka ao anaty script mitokana ny baiko .travis.sh, izay apetraka eo amin'ny fototry ny tetikasa.

Noho izany dia manana ity rakitra manaraka ity izahay .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

Alohan'ny hametrahana ny fonosana dia havaozinay ny submodules. Ilaina izany hananganana PPSSPP. Andeha ampio ny fiasa voalohany amin'ny .travis.sh (mariho ny fanitarana):

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

Ankehitriny dia tonga mivantana amin'ny fametrahana ny fandefasana mandeha ho azy ny PVS-Studio ao amin'ny Travis CI. Voalohany dia mila mametraka ny fonosana PVS-Studio amin'ny rafitra isika:

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
}

Amin'ny fiandohan'ny asa travis_install mametraka ny compiler ilaintsika amin'ny fampiasana ny fari-piainan'ny tontolo iainana. Dia raha ny variable $PVS_ANALYZE mitahiry sanda Eny (Nolazainay tao amin'ny fizarana izany mandefa mandritra ny fananganana matrix configuration), apetrakay ny fonosana pvs-studio. Ho fanampin'izany dia aseho ihany koa ny fonosana libio-socket-ssl-perl ΠΈ libnet-ssleay-perl, na izany aza, takiana amin'ny valin'ny mailaka izy ireo, ka tsy ilaina izany raha nisafidy fomba hafa handefasana ny tatitrao ianao.

asa download_extract misintona sy manala ny arisiva voatondro:

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

Fotoana izao hametrahana ny tetikasa. Izany dia mitranga ao amin'ny fizarana teny:

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
}

Raha ny marina, ity dia fanamafisam-peo tany am-boalohany, afa-tsy ireto andalana ireto:

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

Amin'ity fizarana code ity dia napetrakay cmake saina ho fanondranana baiko fanangonana. Ilaina izany ho an'ny mpanadihady kaody static. Afaka mamaky bebe kokoa momba izany ianao ao amin'ny lahatsoratra "Ahoana ny fampandehanana ny PVS-Studio amin'ny Linux sy macOS".

Raha nahomby ny fivoriambe dia tonga izahay aorian_fahombiazana, izay anaovanay analyse static:

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
}

Andeha hojerentsika akaiky ireto andalana manaraka ireto:

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

Ny andalana voalohany dia mamorona rakitra fahazoan-dΓ lana avy amin'ny solon'anarana sy fanalahidy izay nofaritanay tany am-piandohana rehefa nanangana ny fari-piainan'ny Travis CI.

Ny andalana faharoa dia manomboka mivantana ny fanadihadiana. sainam-pirenena -j mametraka ny isan'ny kofehy hanaovana fanadihadiana, saina -l manondro lisansa, saina -o mamaritra ny rakitra ho an'ny famoahana logs, ary ny saina -disableLicenseExpirationCheck ilaina amin'ny dikan-teny andrana, satria amin'ny alΓ lan'ny default pvs-studio-analyzer hampitandrina ny mpampiasa fa efa ho lany ny fahazoan-dΓ lana. Mba hisorohana izany tsy hitranga, azonao atao ny mamaritra ity saina ity.

Ny rakitra log dia misy vokatra manta izay tsy azo vakiana raha tsy misy fiovam-po, noho izany dia tsy maintsy ataonao ho mora vakiana aloha ilay rakitra. Andao handalo ny logs plog-converter, ary ny vokatra dia rakitra html.

Amin'ity ohatra ity dia nanapa-kevitra ny handefa tatitra amin'ny mailaka aho amin'ny fampiasana ny baiko sendemail.

Vokatr'izany dia nahazo ity rakitra manaraka ity izahay .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;

Fotoana izao hanosehana ny fanovana ao amin'ny tahiry git, ary avy eo ny Travis CI dia hampandeha ho azy ny fananganana. Tsindrio ny "ppsspp" raha handeha amin'ny tatitra fananganana:

Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI amin'ny fampiasana ny emulator PSP ho ohatra
Ho hitantsika ny topimaso momba ny fananganana ankehitriny:

Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI amin'ny fampiasana ny emulator PSP ho ohatra
Raha vita soa aman-tsara ny fananganana dia hahazo mailaka misy ny valin'ny fanadihadiana static izahay. Mazava ho azy fa tsy ny mailaka ihany no fomba hahazoana tatitra. Afaka misafidy izay fomba fampiharana ianao. Saingy zava-dehibe ny mitadidy fa rehefa vita ny fananganana dia tsy azo atao ny miditra amin'ny rakitra milina virtoaly.

Famintinana diso

Nahavita soa aman-tsara ny ampahany sarotra indrindra izahay. Andeha hojerentsika izao fa mendrika ny ezaka rehetra ataontsika. Andeha hojerentsika ny hevitra mahaliana sasany avy amin'ny tatitra momba ny famakafakana static izay tonga tamiko tamin'ny alΓ lan'ny mailaka (tsy hoe tsy maninona no nambarako izany).

Optimization mampidi-doza

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 fampitandremana: V597 Ny compiler dia afaka mamafa ny 'memset' function call, izay ampiasaina hanesorana ny 'sum' buffer. Ny fiasa RtlSecureZeroMemory() dia tokony ampiasaina hamafa ny angona manokana. sha1.cpp 325

Ity sombin-kaody ity dia hita ao amin'ny maodely hashing azo antoka, na izany aza, misy lesoka fiarovana lehibe (CWE-14). Andeha hojerentsika ny lisitry ny fivoriambe izay novokarina rehefa nanangona ny dikan-teny Debug:

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

Milamina sy miasa ny zava-drehetra memeset dia novonoina, noho izany dia overwriting angona manan-danja ao amin'ny RAM, na izany aza, aza mifaly fotsiny. Andeha hojerentsika ny lisitry ny fivoriamben'ny famoahana famoahana miaraka amin'ny fanatsarana:

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

Araka ny hita amin'ny lisitra dia tsy noraharahain'ilay mpanangona ilay antso memeset. Izany dia noho ny zava-misy fa ao amin'ny asa sha1 aorian'ny antso memeset tsy misy resaka rafitra intsony CTX. Noho izany, ny compiler dia tsy mahita hevitra amin'ny fandaniam-potoana amin'ny processeur overwriting fahatsiarovana izay tsy ampiasaina amin'ny ho avy. Azonao atao ny manamboatra izany amin'ny fampiasana ny fiasa RtlSecureZeroMemory na toy izany koa aminy.

hanitsy:

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

Fampitahana tsy ilaina

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 fampitandremana: V547 Marina foana ny fitenenana 'leftvol >= 0'. sceAudio.cpp 120

Tandremo ny sampana hafa ho an'ny voalohany if. Ny kaody dia hotanterahina raha tsy misy fepetra rehetra leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0 hivadika ho lainga. Noho izany dia mahazo ireto fanambarana manaraka ireto isika, izay ho marina amin'ny sampana hafa: voly havia <= 0xFFFF, rightvol <= 0xFFFF, leftvol >= 0 ΠΈ rightvol >= 0. Mariho ireo fanambarana roa farany. Misy dikany ve ny manamarina hoe inona no fepetra ilaina amin'ny fanatanterahana io fehezan-dalΓ na io?

Noho izany dia azontsika esorina soa aman-tsara ireto fanambarana misy fepetra ireto:

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

Toe-javatra iray hafa. Misy karazana lesoka miafina ao ambadik'ireny fepetra mihoa-pefy ireny. Angamba tsy nojereny izay notakina.

Ctrl+C Ctrl+V dia miverina

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 Misy zana-teny mitovy '!Memory::IsValidAddress(psmfData)' eo ankavia sy eo ankavanan'ny '||' mpandraharaha. scePsmf.cpp 703

Tandremo ny seky ao anatiny if. Tsy mahagaga ve ny manamarina raha marina ny adiresy? psmfData, avo roa heny? Ka toa hafahafa amiko izany... Raha ny marina, mazava ho azy fa diso izany, ary ny hevitra dia ny hanamarina ireo paramètre fampidirana.

Safidy marina:

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

Variable hadino

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 fampitandremana: V547 Diso foana ny teny hoe 'habe == 8'. syn-att.c 195

Ity hadisoana ity dia hita ao amin'ny lahatahiry ext, ka tsy dia misy ifandraisany loatra amin'ilay tetikasa, fa ny bug dia hita talohan'ny nahatsikaritra azy, ka nanapa-kevitra ny handao azy aho. Raha ny marina, ity lahatsoratra ity dia tsy momba ny famerenana ny lesoka, fa momba ny fampidirana amin'ny Travis CI, ary tsy nisy ny fanamafisam-peo natao.

Miovaova habe dia natomboka tamin'ny tsy miova, na izany aza, tsy ampiasaina mihitsy ao amin'ny code, hatrany amin'ny operator if, izay, mazava ho azy, manome diso eo am-pandinihana ny fepetra, satria, araka ny tsaroantsika, habe mitovy amin'ny aotra. Tsy misy dikany koa ny fisavana manaraka.

Raha ny fahitana azy dia hadinon'ny mpanoratra ny sombin-kaody ny nanoro ny fari-piainana habe talohan'izay.

MijanΓ²na

Eto no mety hiafarantsika amin'ny fahadisoana. Ny tanjon'ity lahatsoratra ity dia ny hanehoana ny asan'ny PVS-Studio miaraka amin'i Travis CI, fa tsy hamakafaka ny tetikasa araka izay tratra. Raha mila fahadisoana lehibe sy tsara tarehy kokoa ianao, dia azonao atao ny midera azy ireo foana eto :).

famaranana

Ny fampiasana serivisy tranonkala hananganana tetikasa miaraka amin'ny fampiharana ny famakafakana fanampiny dia ahafahanao mahita olana maro avy hatrany aorian'ny fampifangaroana kaody. Na izany aza, mety tsy ho ampy ny fananganana iray, ka ny fametrahana fitiliana miaraka amin'ny famakafakana static dia hanatsara ny kalitaon'ny code.

rohy mahasoa

Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI amin'ny fampiasana ny emulator PSP ho ohatra

Raha te hizara ity lahatsoratra ity amin'ny mpihaino miteny anglisy ianao dia ampiasao ny rohy fandikana: Maxim Zvyagintsev. Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI amin'ny alΓ lan'ny emulator console lalao PSP.

Source: www.habr.com

Add a comment