Faʻafefea ona faʻapipiʻi le PVS-Studio i Travis CI e faʻaaoga ai le faʻataʻitaʻiga o le PSP game console emulator

Faʻafefea ona faʻapipiʻi le PVS-Studio i Travis CI e faʻaaoga ai le faʻataʻitaʻiga o le PSP game console emulator
O le Travis CI o se 'upega tafaʻilagi tufatufaina mo le fausiaina ma le suʻeina o polokalama faʻaoga e faʻaogaina ai le GitHub e avea ma punaoa faʻasalalauga. I le faʻaopoopoga i faʻataʻitaʻiga o loʻo i luga, e mafai ona e faʻaopoopoina lau lava faʻafetai i le tele o filifiliga faʻatulagaina. I lenei tusiga o le a matou faʻatulagaina Travis CI e galulue ma PVS-Studio e faʻaaoga ai le PPSSPP code faʻataʻitaʻiga.

Faatomuaga

Travis C.I. ose 'upega tafa'ilagi mo le fausiaina ma le su'ega polokalama. E masani ona faʻaogaina faʻatasi ma faiga faʻaauau faʻatasi.

PPSSPP - PSP taaloga faamafanafana emulator. E mafai e le polokalame ona faʻataʻitaʻiina le faʻalauiloaina o soʻo se taʻaloga mai ata tisiki faʻamoemoe mo Sony PSP. Na tatalaina le polokalame ia Novema 1, 2012. PPSSPP ua laiseneina i lalo ole GPL v2. So'o se tasi e mafai ona fa'aleleia fa'ailoga fa'apogai.

PVS-potu potu - o se su'esu'ega fa'ailoga fa'amautu mo le su'eina o mea sese ma fa'aletonu e ono tula'i mai ile fa'ailoga polokalame. I lenei tusiga, mo se suiga, o le a matou faʻalauiloaina le PVS-Studio e le o le lotoifale i luga o le masini a le tagata atiaʻe, ae i totonu o le ao, ma vaavaai mo mea sese i le PPSSPP.

Faʻatulagaina Travis CI

Matou te manaʻomia se fale teu oloa i GitHub, lea o loʻo i ai le poloketi matou te manaʻomia, faʻapea foʻi ma se ki mo PVS-Studio (e mafai ona e mauaina. ki faamasinoga poʻo e leai se totogi mo poloketi Open Source).

Tatou o i le saite Travis C.I.. A maeʻa le faʻatagaina e faʻaaoga ai lau tala GitHub, o le a matou vaʻai i se lisi o faleoloa:

Faʻafefea ona faʻapipiʻi le PVS-Studio i Travis CI e faʻaaoga ai le faʻataʻitaʻiga o le PSP game console emulator
Mo le suʻega, na ou togiina le PPSSPP.

Matou te faʻagaoioia le faleoloa matou te manaʻo e aoina:

Faʻafefea ona faʻapipiʻi le PVS-Studio i Travis CI e faʻaaoga ai le faʻataʻitaʻiga o le PSP game console emulator
I le taimi nei, e le mafai e Travis CI ona fausia la matou poloketi ona e leai ni faʻatonuga mo le fausiaina. O lea ua oʻo i le taimi mo le faʻatulagaina.

I le taimi o le auʻiliʻiliga, o nisi fesuiaiga o le a aoga ia i tatou, mo se faʻataʻitaʻiga, le ki mo PVS-Studio, lea o le a le manaʻomia e faʻamaonia i le faila faila. O lea seʻi o tatou faʻaopoopo suiga o le siosiomaga e faʻaaoga ai le fausiaina o fale i Travis CI:

Faʻafefea ona faʻapipiʻi le PVS-Studio i Travis CI e faʻaaoga ai le faʻataʻitaʻiga o le PSP game console emulator
Matou te manaʻomia:

  • PVS_USERNAME - igoa ole igoa
  • PVS_KEY - ki
  • MAIL_USER - imeli e fa'aoga e lafo ai le lipoti
  • MAIL_PASSWORD - imeli password

O le lua mulimuli e filifili. O nei mea o le a fa'aaogaina e lafo ai fa'ai'uga i meli. Afai e te manaʻo e tufatufa atu le lipoti i se isi auala, e te le manaʻomia le faʻailoaina.

O lea la, ua matou faʻaopoopoina suiga o le siosiomaga matou te manaʻomia:

Faʻafefea ona faʻapipiʻi le PVS-Studio i Travis CI e faʻaaoga ai le faʻataʻitaʻiga o le PSP game console emulator
Sei o tatou faia se faila .travis.yml ma tuu i le a'a o le galuega. O le PPSSPP ua uma ona i ai se faila faʻapipiʻi mo Travis CI, peitaʻi, e telē tele ma e matua le talafeagai mo le faʻataʻitaʻiga, o lea e tatau ai ona matou faʻafaigofie tele ma tuʻu naʻo elemene autu.

Muamua, seʻi o tatou faʻaalia le gagana, le lomiga o le Ubuntu Linux tatou te manaʻo e faʻaoga i le masini masini, ma afifi talafeagai mo le fausiaina:

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'

O afifi uma o lo'o lisiina e mana'omia na'o le PPSSPP.

O lenei matou te faʻaalia le faʻapotopotoga matrix:

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

O sina mea itiiti e uiga i le vaega Numera. I le Travis CI, e lua auala e fatuina ai le fausiaina o filifiliga: muamua o le faʻamaonia o se lisi o tuʻufaʻatasiga, ituaiga faiga faʻaogaina, fesuiaiga o le siosiomaga, ma isi, pe a maeʻa ona faʻatupuina se matrix o tuʻufaʻatasiga uma; o le lona lua o se faʻaaliga manino o le matrix. Ioe, e mafai ona e tuʻufaʻatasia nei auala e lua ma faʻaopoopo se tulaga tulaga ese, pe, i se isi itu, e le aofia ai le faʻaaogaina o le vaega. aloese. E mafai ona e faitau atili e uiga i lenei mea ile Travis CI faʻamaumauga.

Pau lava le mea o loʻo totoe o le tuʻuina atu lea o faʻatonuga faʻapitoa mo le faʻapotopotoga:

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 faʻatagaina oe e faʻaopoopo au oe lava poloaiga mo vaega eseese o le olaga o se masini komepiuta. Vaega before_install fa'atino a'o le'i fa'apipi'i afifi. Ona faʻapipiʻi, lea e mulimuli i le faʻapipiʻiina o afifi mai le lisi addons.aptlea na matou faailoa atu i luga. O le fono lava ia e faia i totonu tusilima. Afai na lelei mea uma, ona tatou maua ai lea oi tatou i totonu ina ua_manuia (o totonu o lenei vaega o le a matou faʻatautaia ai suʻesuʻega faʻapitoa). E le o laasaga uma ia e mafai ona suia, afai e te manaʻomia nisi mea, e tatau ona e vaʻai i totonu Travis CI faʻamaumauga.

Mo le faigofie o le faitau, na tuʻuina poloaiga i se isi tusitusiga .travis.sh, lea e tu'u i le a'a o le poloketi.

O lea ua matou maua le faila lea .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

Aʻo leʻi faʻapipiʻiina afifi, matou te faʻafouina ia submodules. E mana'omia lea e fausia ai le PPSSPP. Tatou fa'aopoopo le galuega muamua i .travis.sh (manatua le fa'aopoopoga):

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

O lea ua matou sau sa'o i le fa'atulagaina o le fa'alauiloaina otometi o le PVS-Studio i Travis CI. Muamua e manaʻomia le faʻapipiʻiina o le PVS-Studio package i luga o le polokalama:

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
}

I le amataga o le gaioiga travis_install matou te faʻapipiʻi le tuʻufaʻatasiga matou te manaʻomia e faʻaaoga ai fesuiaiga o le siosiomaga. Ona afai o le fesuiaiga $PVS_ANALYZE faleoloa tau ioe (sa matou faʻaalia i le vaega auina atu i le taimi o le fausiaina o le matrix configuration), matou te faʻapipiʻi le afifi pvs-studio. E le gata i lea, o loʻo faʻaalia foi afifi libio-socket-ssl-perl и libnet-ssleay-perl, ae ui i lea, e mana'omia mo le meli i'uga, o lea e le mana'omia pe afai ua e filifilia se isi auala mo le tu'uina atu o lau lipoti.

galuega tauave download_extract la'u mai ma tatala le fa'amaumauga fa'apitoa:

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

Ua oo i le taimi e tuufaatasia ai le poloketi. E tupu lenei mea i le vaega tusilima:

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
}

O le mea moni, o se faʻamatalaga faigofie muamua, sei vagana ai laina nei:

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

I lenei vaega o le code ua matou setiina mo cmake fu'a mo le auina atu i fafo o poloaiga tu'ufa'atasi. E mana'omia lenei mea mo se su'esu'ega code static. E mafai ona e faitau atili e uiga i lenei mea i le tusiga "Faʻafefea ona taʻavale PVS-Studio i Linux ma macOS".

Afai na manuia le faʻapotopotoga, ona tatou oʻo lea i ina ua_manuia, lea matou te faia ai suʻesuʻega faʻapitoa:

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
}

Sei o tatou tilotilo totoa i laina nei:

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

O le laina muamua e maua ai se faila laisene mai le igoa ole igoa ma le ki lea na matou faʻamaonia i le amataga pe a faʻatulagaina le suiga ole siosiomaga Travis CI.

O le laina lona lua e amata sa'o le au'ili'iliga. Fu'a -j fa'atulaga le numera o filo mo su'esu'ega, fu'a -l fa'ailoa laisene, fu'a -o fa'amatala le faila mo le fa'auluina o ogalaau, ma le fu'a -disableLicenseExpirationCheck mana'omia mo fa'ata'ita'iga fa'ata'ita'iga, talu ai e le mafai pvs-studio-analyzer o le a lapata'ia le tagata fa'aoga o le laisene ua lata ona muta. Ina ia taofia lenei mea mai le tupu, e mafai ona e faʻamaonia lenei fuʻa.

O le faila ogalaau o loʻo i ai mea faʻapitoa e le mafai ona faitau e aunoa ma le liua, o lea e tatau ai ona e faʻaogaina muamua le faila. Tatou pasi atu ogalaau fa'alili-liliu, ma o le gaioiga o se faila html.

I lenei faʻataʻitaʻiga, na ou filifili e auina atu lipoti i meli e faʻaaoga ai le poloaiga melimeli.

O se taunuuga, matou maua le faila lea .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;

Ua oʻo nei i le taimi e tuleia ai suiga i le git repository, a maeʻa lea o Travis CI o le a otometi lava ona faʻatautaia le fausiaina. Kiliki i luga o le "ppsspp" e alu i le fausiaina o lipoti:

Faʻafefea ona faʻapipiʻi le PVS-Studio i Travis CI e faʻaaoga ai le faʻataʻitaʻiga o le PSP game console emulator
O le a tatou vaʻai i se aotelega o le fausiaina o loʻo iai nei:

Faʻafefea ona faʻapipiʻi le PVS-Studio i Travis CI e faʻaaoga ai le faʻataʻitaʻiga o le PSP game console emulator
Afai e faʻamaeʻaina lelei le fausiaina, o le a matou mauaina se imeli ma faʻaiʻuga o suʻesuʻega faʻamau. Ioe, o le meli e le na o le pau lea o le auala e maua ai se lipoti. E mafai ona e filifilia soʻo se auala faʻatinoga. Ae e taua le manatua pe a maeʻa le fausiaina, o le a le mafai ona faʻaogaina faila masini masini.

Aotelega sese

Ua mae'a manuia le vaega pito sili ona faigata. Ia tatou mautinoa e aoga uma a tatou taumafaiga. Seʻi o tatou vaʻavaʻai i nisi o mea manaia mai le lipoti o suʻesuʻega faʻapitoa na oʻo mai ia te aʻu i meli (e le o se mea na ou faʻaalia ai).

Fa'atonuga mata'utia

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 lapataiga: V597 E mafai e le tagata fa'apipi'i ona tape le 'memset' function call, lea e fa'aaogaina e fa'amama ai le 'sum' buffer. Ole galuega RtlSecureZeroMemory() e tatau ona fa'aoga e tape ai fa'amatalaga patino. sha1.cpp 325

O lenei fasi code o loʻo tuʻuina i totonu o le faʻamaufaʻailoga faʻapipiʻi, peitaʻi, o loʻo i ai se faʻaletonu matuia o le puipuiga (CWE-14). Sei o tatou tilotilo i le lisi o faʻapotopotoga e faʻatupuina pe a tuʻufaʻatasia le Debug version:

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

O mea uma o loʻo faʻatulagaina ma le faʻatinoga faʻamanatu ua faʻataunuʻuina, ma faʻasolo ai faʻamatalaga taua i le RAM, ae ui i lea, aua le fiafia i le taimi nei. Se'i tatou va'ai i le lisi fa'apotopotoga o le Fa'asalalauga fa'atasi ma le fa'alelei:

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

E pei ona mafai ona vaʻaia mai le lisi, na le amanaʻia e le tagata faʻapipiʻi le valaau faʻamanatu. E mafua lenei mea i le mea moni i totonu o le galuega sha1 ina ua uma le valaau faʻamanatu le toe fa'asino i le fausaga CTX. O le mea lea, e le iloa e le tagata faʻapipiʻi se mea e faʻaumatia ai le taimi o le gaosiga e faʻaaogaina ai le manatua e le faʻaaogaina i le lumanaʻi. E mafai ona e faʻaleleia lenei mea e ala i le faʻaaogaina o le galuega RtlSecureZeroMemory poʻo tutusa ia te ia.

Tauagavale:

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

Faatusatusaga le talafeagai

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 lapataiga: V547 Fa'amatalaga 'leftvol >= 0' e moni i taimi uma. sceAudio.cpp 120

Faʻalogo i le isi lala mo le muamua if. O le code o le a fa'atinoina na'o tulaga uma leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0 o le a iu ina pepelo. O le mea lea, matou te maua faʻamatalaga nei, lea o le a moni mo le isi lala: leftvol <= 0xFFFF, rightvol <= 0xFFFF, leftvol >= 0 и rightvol >= 0. Matau faamatalaga mulimuli e lua. E talafeagai le siakiina o le a le tulaga talafeagai mo le faʻatinoina o lenei fasi code?

O lea e mafai ai ona matou aveese ma le saogalemu ia faʻamatalaga faʻapitoa:

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

O le isi fa'aaliga. O lo'o i ai se ituaiga o mea sese o lo'o natia i tua o nei tulaga fa'aletonu. Atonu latou te leʻi siakiina mea e manaʻomia.

Ctrl+C Ctrl+V Toe Toe

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 E iai fa'amatalaga tutusa '!Memory::IsValidAddress(psmfData)' i le agavale ma le taumatau o le '||' fa'afoe. scePsmf.cpp 703

Fa'alogo lelei ile siaki i totonu if. E te le manatu ea o se mea uiga ese tatou te siaki pe aoga le tuatusi? psmfData, faaluaina? O lea la e foliga ese lenei mea ia te aʻu ... O le mea moni, o le mea moni, o se typo, ma o le manatu o le siakiina o faʻamaufaʻailoga uma e lua.

Filifiliga sa'o:

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

Fesuiaiga galo

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 lapataiga: V547 Fa'amatalaga 'size == 8' e sese i taimi uma. syn-att.c 195

O lenei mea sese o loʻo i totonu o le faila la, e le talafeagai tele i le poloketi, ae na maua le pusa ae ou te leʻi matauina, o lea na ou filifili ai e alu ese. I le uma, o lenei tusiga e le o le toe iloiloina o mea sese, ae e uiga i le tuʻufaʻatasia ma Travis CI, ma e leai se faʻatulagaga o le suʻega na faia.

Fesuiaiga fua e amataina i se fa'aauau, peita'i, e le'o fa'aaogaina i le fa'ailoga, e o'o i lalo i le tagata fa'afoe if, lea, ioe, e maua ai sese a o siaki tulaga, aua, e pei ona tatou manatua, fua tutusa ma le leai. E leai foi se uiga o siaki mulimuli ane.

E foliga mai, na galo i le tusitala o le vaega o le code e sui ai le fesuiaiga fua i luma o lena.

taofi

Atonu o i'ina tatou te i'u ai i mea sese. O le faʻamoemoe o lenei tusiga o le faʻaalia lea o le galuega a le PVS-Studio faʻatasi ma Travis CI, ae le o le suʻesuʻeina o le poloketi i le maeʻaeʻa e mafai ai. Afai e te manaʻo i ni mea sese tetele ma sili atu ona matagofie, e mafai ona e faʻamemelo i taimi uma iinei :)

iʻuga

O le fa'aogaina o 'au'aunaga i luga ole laiga e fausia ai galuega fa'atasi ma le fa'ata'ita'iga o su'esu'ega fa'aopoopo e mafai ai ona e maua le tele o fa'afitauli i le taimi lava e tu'ufa'atasia ai le code. Ae ui i lea, o le tasi fale atonu e le lava, o lea o le faʻatulagaina o suʻega faʻatasi ma suʻesuʻega static o le a faʻaleleia atili ai le lelei o le code.

aoga fesoʻotaʻiga

Faʻafefea ona faʻapipiʻi le PVS-Studio i Travis CI e faʻaaoga ai le faʻataʻitaʻiga o le PSP game console emulator

Afai e te manaʻo e faʻasoa lenei tusiga i se faʻalogo Igilisi, faʻamolemole faʻaoga le fesoʻotaʻiga faʻaliliu: Maxim Zvyagintsev. Faʻafefea ona faʻatutuina le PVS-Studio i Travis CI e faʻaaoga ai le faʻataʻitaʻiga o le PSP game console emulator.

puna: www.habr.com

Faaopoopo i ai se faamatalaga