Yuav ua li cas teeb tsa PVS-Studio hauv Travis CI siv piv txwv ntawm PSP game console emulator

Yuav ua li cas teeb tsa PVS-Studio hauv Travis CI siv piv txwv ntawm PSP game console emulator
Travis CI yog ib qho kev pabcuam hauv lub vev xaib rau kev tsim thiab kev sim software uas siv GitHub ua qhov code hosting. Ntxiv rau qhov kev ua haujlwm saum toj no, koj tuaj yeem ntxiv koj tus kheej ua tsaug rau cov kev xaiv dav dav. Hauv kab lus no peb yuav teeb tsa Travis CI ua haujlwm nrog PVS-Studio siv PPSSPP code piv txwv.

Taw qhia

Travis IB yog lub vev xaib kev pabcuam tsim thiab kuaj software. Nws feem ntau yog siv nrog kev sib koom ua ke txuas ntxiv.

PPSSPP - PSP game console emulator. Qhov kev pab cuam muaj peev xwm ua raws li kev tshaj tawm ntawm txhua qhov kev ua si los ntawm cov duab disk npaj rau Sony PSP. Qhov kev zov me nyuam tau tso tawm rau lub Kaum Ib Hlis 1, 2012. PPSSPP tau ntawv tso cai raws li GPL v2. Leej twg tuaj yeem txhim kho qhov project source code.

PVS Studio - tus lej ntsuas tus lej zoo li qub rau kev tshawb nrhiav qhov tsis raug thiab qhov muaj peev xwm ua rau muaj qhov tsis zoo hauv qhov program code. Hauv tsab xov xwm no, rau kev hloov pauv, peb yuav tso tawm PVS-Studio tsis yog hauv zos ntawm tus tsim tawm lub tshuab, tab sis hauv huab, thiab nrhiav qhov yuam kev hauv PPSSPP.

Teeb tsa Travis CI

Peb yuav xav tau lub chaw cia khoom ntawm GitHub, qhov chaw peb xav tau nyob, nrog rau tus yuam sij rau PVS-Studio (koj tuaj yeem tau txais tus yuam sij sim los yog pub dawb rau Open Source tej yaam num).

Wb mus rau qhov chaw Travis IB. Tom qab tso cai siv koj tus lej GitHub, peb yuav pom cov npe ntawm cov chaw khaws cia:

Yuav ua li cas teeb tsa PVS-Studio hauv Travis CI siv piv txwv ntawm PSP game console emulator
Rau qhov kev xeem, kuv forked PPSSPP.

Peb qhib lub repository uas peb xav mus sau:

Yuav ua li cas teeb tsa PVS-Studio hauv Travis CI siv piv txwv ntawm PSP game console emulator
Tam sim no, Travis CI tsis tuaj yeem tsim peb qhov project vim tias tsis muaj cov lus qhia rau kev tsim. Yog li nws yog lub sijhawm rau kev teeb tsa.

Thaum lub sij hawm tsom xam, qee qhov kev hloov pauv yuav muaj txiaj ntsig zoo rau peb, piv txwv li, tus yuam sij rau PVS-Studio, uas yuav tsis xav tau los qhia meej hauv cov ntaub ntawv teeb tsa. Yog li cia peb ntxiv qhov hloov pauv ib puag ncig siv cov teeb tsa tsim hauv Travis CI:

Yuav ua li cas teeb tsa PVS-Studio hauv Travis CI siv piv txwv ntawm PSP game console emulator
Peb yuav tsum tau:

  • PVS_USERNAME - tus neeg siv lub npe
  • PVS_KEY - key
  • MAIL_USER - email uas yuav siv los xa daim ntawv tshaj tawm
  • MAIL_PASSWORD - email password

Qhov kawg ob yog xaiv tau. Cov no yuav raug siv los xa cov txiaj ntsig los ntawm kev xa ntawv. Yog tias koj xav xa daim ntawv tshaj tawm rau lwm txoj hauv kev, koj tsis tas yuav qhia lawv.

Yog li, peb tau ntxiv qhov hloov pauv ib puag ncig peb xav tau:

Yuav ua li cas teeb tsa PVS-Studio hauv Travis CI siv piv txwv ntawm PSP game console emulator
Tam sim no cia peb tsim cov ntaub ntawv .travis.yml thiab muab tso rau hauv lub hauv paus ntawm qhov project. PPSSPP twb muaj cov ntaub ntawv teeb tsa rau Travis CI, txawm li cas los xij, nws loj dhau thiab tsis haum rau qhov piv txwv, yog li peb yuav tsum ua kom yooj yim rau nws thiab tawm tsuas yog cov ntsiab lus tseem ceeb.

Ua ntej, cia peb qhia cov lus, version ntawm Ubuntu Linux uas peb xav siv hauv lub tshuab virtual, thiab cov pob tsim nyog rau kev tsim:

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'

Txhua pob khoom uas tau teev tseg yog xav tau tshwj xeeb rau PPSSPP.

Tam sim no peb qhia qhov sib dhos matrix:

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

Ib me ntsis ntxiv txog ntu Matrix. Hauv Travis CI, muaj ob txoj hauv kev los tsim cov kev xaiv tsim: thawj yog los qhia cov npe ntawm cov compilers, hom kev ua haujlwm, ib puag ncig hloov pauv, thiab lwm yam, tom qab ntawd cov matrix ntawm txhua qhov sib xyaw ua ke tau tsim; qhov thib ob yog qhov qhia meej ntawm matrix. Tau kawg, koj tuaj yeem ua ke ob txoj hauv kev no thiab ntxiv cov ntaub ntawv tshwj xeeb, lossis, ntawm qhov tsis sib xws, tsis suav nrog nws siv ntu tsis suav. Koj tuaj yeem nyeem ntxiv txog qhov no hauv Travis CI cov ntaub ntawv.

Txhua yam uas tseem tshuav yog muab cov lus qhia tshwj xeeb rau kev sib dhos ua ke:

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 tso cai rau koj ntxiv koj tus kheej cov lus txib rau ntau theem ntawm lub neej ntawm lub tshuab virtual. Tshooj ua ntej_install ua ntej txhim kho pob khoom. Ces nruab, uas ua raws li kev teeb tsa ntawm cov pob khoom los ntawm cov npe addons.aptuas peb tau qhia saum toj no. Lub rooj sib txoos nws tus kheej yuav siv qhov chaw hauv tsab ntawv. Yog tias txhua yam mus zoo, ces peb pom peb tus kheej hauv tom qab_ua tiav (nws yog nyob rau hauv seem no uas peb yuav khiav static tsom xam). Cov no tsis yog tag nrho cov kauj ruam uas tuaj yeem hloov kho, yog tias koj xav tau ntau dua, ces koj yuav tsum saib hauv Travis CI cov ntaub ntawv.

Kom yooj yim ntawm kev nyeem ntawv, cov lus txib tau muab tso rau hauv ib tsab ntawv cais .travis.sh, uas yog muab tso rau ntawm qhov project hauv paus.

Yog li peb muaj cov ntaub ntawv hauv qab no .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

Ua ntej txhim kho cov pob khoom, peb yuav hloov kho cov submodules. Qhov no yog xav tau los tsim PPSSPP. Cia peb ntxiv thawj qhov ua haujlwm rau .travis.sh (nco qhov txuas ntxiv):

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

Tam sim no peb tuaj ncaj qha mus teeb tsa qhov kev tso tawm tsis siv neeg ntawm PVS-Studio hauv Travis CI. Ua ntej peb yuav tsum nruab PVS-Studio pob ntawm lub kaw lus:

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
}

Thaum pib ntawm kev ua haujlwm travis_install peb nruab cov compilers peb xav tau siv ib puag ncig variables. Ces yog qhov sib txawv $PVS_ANALYZE khaws nqi Yog (Peb tau qhia nws hauv ntu kwv yees thaum tsim matrix configuration), peb nruab lub pob pvs-studio. Ntxiv rau qhov no, cov pob khoom kuj tau qhia libio-socket-ssl-perl ΠΈ libnet-ssleay-perlTxawm li cas los xij, lawv yuav tsum tau xa cov txiaj ntsig, yog li lawv tsis tsim nyog yog tias koj tau xaiv lwm txoj hauv kev xa koj daim ntawv tshaj tawm.

muaj nuj nqi download_extract downloads thiab unpacks cov ntaub ntawv teev tseg:

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

Nws yog lub sijhawm los muab qhov project ua ke. Qhov no tshwm sim hauv ntu tsab ntawv:

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
}

Qhov tseeb, qhov no yog ib qho yooj yim thawj configuration, tshwj tsis yog rau cov kab no:

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

Hauv seem no code peb teem rau cmak ua chij rau exporting compilation commands. Qhov no yog tsim nyog rau ib tug static code analyzer. Koj tuaj yeem nyeem ntxiv txog qhov no hauv kab lus "Yuav ua li cas khiav PVS-Studio ntawm Linux thiab macOS".

Yog tias lub rooj sib txoos ua tiav, ces peb tau mus tom qab_ua tiav, qhov twg peb ua static tsom xam:

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
}

Cia peb ua tib zoo saib cov kab hauv qab no:

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

Thawj kab tsim cov ntawv tso cai los ntawm tus neeg siv lub npe thiab tus yuam sij uas peb tau teev tseg thaum pib thaum teeb tsa Travis CI ib puag ncig hloov pauv.

Cov kab thib ob pib qhov kev tsom xam ncaj qha. Chij -j teev tus naj npawb ntawm threads rau kev tsom xam, chij -l qhia daim ntawv tso cai, chij -o txhais cov ntaub ntawv rau outputting cav, thiab tus chij -disableLicenseExpirationCheck yuav tsum tau mus sib versions, txij li thaum los ntawm lub neej ntawd pvs-studio-analyzer yuav ceeb toom rau tus neeg siv tias daim ntawv tso cai yuav tas sijhawm. Txhawm rau tiv thaiv qhov no tshwm sim, koj tuaj yeem teev tus chij no.

Cov ntaub ntawv cav muaj cov ntaub ntawv nyoos uas tsis tuaj yeem nyeem tsis tau hloov dua siab tshiab, yog li koj yuav tsum xub ua kom cov ntaub ntawv nyeem tau. Cia peb hla lub cav dhau los Plog converter, thiab cov zis yog cov ntaub ntawv html.

Hauv qhov piv txwv no, kuv txiav txim siab xa cov ntawv ceeb toom los ntawm kev xa ntawv siv cov lus txib xa email.

Yog li ntawd, peb tau txais cov ntaub ntawv hauv qab no .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;

Tam sim no nws yog lub sijhawm los thawb cov kev hloov pauv rau git repository, tom qab uas Travis CI yuav cia li khiav qhov tsim. Nyem rau ntawm "ppsspp" mus rau cov ntaub ntawv tsim:

Yuav ua li cas teeb tsa PVS-Studio hauv Travis CI siv piv txwv ntawm PSP game console emulator
Peb yuav pom lub ntsiab lus ntawm kev tsim tam sim no:

Yuav ua li cas teeb tsa PVS-Studio hauv Travis CI siv piv txwv ntawm PSP game console emulator
Yog tias kev tsim ua tiav tiav, peb yuav tau txais email nrog cov txiaj ntsig ntawm kev txheeb xyuas zoo li qub. Tau kawg, kev xa ntawv tsis yog tib txoj hauv kev kom tau txais daim ntawv qhia. Koj tuaj yeem xaiv txhua txoj kev siv. Tab sis nws tseem ceeb heev uas yuav tsum nco ntsoov tias tom qab tsim tiav, nws yuav tsis tuaj yeem nkag mus rau cov ntaub ntawv tshuab virtual.

Cov ntsiab lus yuam kev

Peb tau ua tiav qhov nyuaj tshaj plaws. Tam sim no cia peb ua kom paub tseeb tias tag nrho peb cov kev siv zog tsim nyog. Cia peb saib qee cov ntsiab lus nthuav tawm los ntawm daim ntawv qhia kev txheeb xyuas zoo li qub uas tuaj rau kuv hauv kev xa ntawv (nws tsis yog rau tsis muaj dab tsi uas kuv tau qhia nws).

Kev ua kom zoo txaus ntshai

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 ceeb toom: V597 Lub compiler tuaj yeem rho tawm 'memset' muaj nuj nqi hu, uas yog siv los yaug 'sum' tsis. RtlSecureZeroMemory() muaj nuj nqi yuav tsum tau siv los lwv cov ntaub ntawv ntiag tug. ib 1.cpp 325

Daim code no nyob rau hauv qhov kev ruaj ntseg hashing module, txawm li cas los xij, nws muaj qhov tsis txaus ntseeg loj (CWJ-14). Cia peb saib cov npe sib dhos uas tau tsim thaum sau cov Debug version:

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

Txhua yam yog nyob rau hauv kev txiav txim thiab muaj nuj nqi memeset raug tua, yog li overwriting cov ntaub ntawv tseem ceeb hauv RAM, txawm li cas los xij, tsis zoo siab tam sim no. Cia peb saib ntawm cov npe sib dhos ntawm Tso Tawm version nrog optimization:

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

Raws li tuaj yeem pom los ntawm cov npe, lub compiler ignored hu memeset. Qhov no yog vim qhov tseeb tias hauv kev ua haujlwm sha1 tom qab hu memeset tsis muaj ntau siv rau cov qauv xwm ctx. Yog li ntawd, lub compiler pom tsis muaj ntsiab lus nyob rau hauv nkim processor sij hawm overwriting nco uas tsis siv yav tom ntej. Koj tuaj yeem kho qhov no los ntawm kev siv lub luag haujlwm RtlSecureZeroMemory los yog zoo sib xws rau nws.

Yog lawm:

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

Kev sib piv tsis tsim nyog

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 ceeb toom: V547 Kev nthuav qhia 'leftvol>= 0' yeej ib txwm muaj tseeb. sceAudio.cpp 120

Ua tib zoo saib lwm ceg rau thawj if. Cov cai yuav raug ua tsuas yog tias txhua yam xwm txheej leftvol > 0xFFFF || rightvol > 0xFFFF || sab laug <0 || txoj cai <0 yuav tig los ua cuav. Yog li ntawd, peb tau txais cov nqe lus hauv qab no, uas yuav muaj tseeb rau lwm ceg: leftvol <= 0xFFFF, rightvol <= 0xFFFF, luas >= 0 ΠΈ rightvol >= 0. Pom ob nqe lus kawg. Nws puas tsim nyog los xyuas seb qhov twg yog qhov tsim nyog rau kev ua tiav ntawm daim ntawv no?

Yog li peb tuaj yeem tshem tawm cov lus hais raws li nram no:

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

Lwm qhov xwm txheej. Muaj qee yam kev ua yuam kev zais tom qab cov xwm txheej tsis txaus ntseeg no. Tej zaum lawv tsis tau txheeb xyuas qhov yuav tsum tau ua.

Ctrl + C Ctrl + V Strikes Back

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 Muaj zoo ib yam sub-expressions '!Memory::IsValidAddress(psmfData)' rau sab laug thiab sab xis ntawm '||' tus neeg ua haujlwm. xwm 703

Ua tib zoo saib rau daim tshev sab hauv if. Koj tsis xav tias nws yog qhov txawv uas peb tshawb xyuas seb qhov chaw nyob puas siv tau? psmfData, ob npaug ntau npaum li cas? Yog li qhov no zoo li coj txawv txawv rau kuv... Qhov tseeb, qhov no yog, ntawm chav kawm, typo, thiab lub tswv yim yog los xyuas ob qho tib si input tsis.

Kev xaiv raug:

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

Tsis nco qab variable

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 ceeb toom: V547 Kev nthuav qhia 'size == 8' yog ib txwm tsis tseeb. sib 195

Qhov kev ua yuam kev no nyob hauv daim ntawv tais ceev tseg ext, yog li tsis tshua muaj feem cuam tshuam rau qhov project, tab sis tus kab mob tau pom ua ntej kuv pom nws, yog li kuv txiav txim siab tawm nws. Tom qab tag nrho, tsab xov xwm no tsis yog hais txog kev tshuaj xyuas qhov yuam kev, tab sis hais txog kev koom ua ke nrog Travis CI, thiab tsis muaj kev teeb tsa ntawm lub ntsuas ntsuas tau ua tiav.

Kuj tsis paub meej loj yog pib los ntawm qhov tsis tu ncua, txawm li cas los xij, nws tsis siv tag nrho hauv cov lej, txoj cai nqes mus rau tus neeg teb xov tooj if, uas, ntawm chav kawm, muab cuav thaum kuaj xyuas cov xwm txheej, vim tias, raws li peb nco qab, loj sib npaug rau xoom. Cov kev txheeb xyuas tom ntej kuj tsis muaj txiaj ntsig.

Thaj, tus sau ntawm cov kab lus tawg tsis nco qab los sau qhov sib txawv loj ua ntej ntawd.

Tsis txhob

Qhov no yog qhov uas peb yuav zaum kawg nrog qhov yuam kev. Lub hom phiaj ntawm tsab xov xwm no yog los qhia txog kev ua haujlwm ntawm PVS-Studio ua ke nrog Travis CI, thiab tsis yog txhawm rau txheeb xyuas qhov project kom meej li sai tau. Yog tias koj xav yuam kev loj dua thiab zoo nkauj dua, koj tuaj yeem qhuas lawv txhua lub sijhawm no Teb :).

xaus

Siv cov kev pabcuam hauv lub vev xaib los tsim cov haujlwm ua ke nrog kev coj ua ntawm kev ntsuas ntxiv tso cai rau koj pom ntau yam teeb meem tam sim tom qab sib koom ua ke. Txawm li cas los xij, ib qho kev tsim yuav tsis txaus, yog li kev teeb tsa kev sim ua ke nrog kev txheeb xyuas zoo li qub yuav ua rau muaj txiaj ntsig zoo ntawm cov cai.

Pab kev sib txuas lus

Yuav ua li cas teeb tsa PVS-Studio hauv Travis CI siv piv txwv ntawm PSP game console emulator

Yog tias koj xav qhia cov kab lus no nrog cov neeg hais lus Askiv, thov siv qhov txuas txhais lus: Maxim Zvyagintsev. Yuav teeb li cas PVS-Studio hauv Travis CI siv piv txwv ntawm PSP game console emulator.

Tau qhov twg los: www.hab.com

Ntxiv ib saib