Bii o ṣe le ṣeto PVS-Studio ni Travis CI ni lilo emulator PSP gẹgẹbi apẹẹrẹ

Bii o ṣe le ṣeto PVS-Studio ni Travis CI ni lilo emulator PSP gẹgẹbi apẹẹrẹ
Travis CI jẹ iṣẹ wẹẹbu pinpin fun kikọ ati sọfitiwia idanwo ti o lo GitHub bi alejo gbigba koodu orisun. Ni afikun si awọn oju iṣẹlẹ iṣẹ ti o wa loke, o le ṣafikun ọpẹ tirẹ si awọn aṣayan atunto lọpọlọpọ. Ninu nkan yii a yoo tunto Travis CI lati ṣiṣẹ pẹlu PVS-Studio nipa lilo apẹẹrẹ koodu PPSSPP.

Ifihan

Travis C.I. jẹ iṣẹ wẹẹbu kan fun kikọ ati sọfitiwia idanwo. O maa n lo ni apapo pẹlu awọn iṣe isọpọ ti nlọsiwaju.

PPSSPP - PSP game console emulator. Eto naa ni anfani lati farawe ifilọlẹ awọn ere eyikeyi lati awọn aworan disiki ti a pinnu fun Sony PSP. Eto naa ti jade ni Oṣu kọkanla, ọdun 1. PPSSPP ni iwe-aṣẹ labẹ GPL v2012. Ẹnikẹni le ṣe awọn ilọsiwaju si koodu orisun ise agbese.

PVS-Studio - Oluyẹwo koodu aimi fun wiwa awọn aṣiṣe ati awọn ailagbara ti o pọju ninu koodu eto. Ninu àpilẹkọ yii, fun iyipada, a yoo ṣe ifilọlẹ PVS-Studio kii ṣe ni agbegbe lori ẹrọ olupilẹṣẹ, ṣugbọn ninu awọsanma, ati ki o wa awọn aṣiṣe ni PPSSPP.

Eto Travis CI

A yoo nilo ibi ipamọ kan lori GitHub, nibiti iṣẹ akanṣe ti a nilo wa, bakanna bi bọtini fun PVS-Studio (o le gba bọtini idanwo tabi free fun Open Source ise agbese).

Jẹ ki a lọ si aaye naa Travis C.I.. Lẹhin aṣẹ nipa lilo akọọlẹ GitHub rẹ, a yoo rii atokọ ti awọn ibi ipamọ:

Bii o ṣe le ṣeto PVS-Studio ni Travis CI ni lilo emulator PSP gẹgẹbi apẹẹrẹ
Fun idanwo naa, Mo forked PPSSPP.

A mu ibi ipamọ ṣiṣẹ ti a fẹ gba:

Bii o ṣe le ṣeto PVS-Studio ni Travis CI ni lilo emulator PSP gẹgẹbi apẹẹrẹ
Ni akoko yii, Travis CI ko le kọ iṣẹ akanṣe wa nitori ko si awọn ilana fun kikọ. Nitorina o to akoko fun iṣeto ni.

Lakoko itupalẹ, diẹ ninu awọn oniyipada yoo wulo fun wa, fun apẹẹrẹ, bọtini fun PVS-Studio, eyiti yoo jẹ aifẹ lati pato ninu faili iṣeto ni. Nitorinaa jẹ ki a ṣafikun awọn oniyipada ayika ni lilo awọn eto kikọ ni Travis CI:

Bii o ṣe le ṣeto PVS-Studio ni Travis CI ni lilo emulator PSP gẹgẹbi apẹẹrẹ
A yoo nilo:

  • PVS_USERNAME - orukọ olumulo
  • PVS_KEY - bọtini
  • MAIL_USER - imeeli ti yoo lo lati fi ijabọ naa ranṣẹ
  • MAIL_PASSWORD - ọrọ igbaniwọle imeeli

Awọn ti o kẹhin meji ni o wa iyan. Iwọnyi yoo ṣee lo lati fi awọn abajade ranṣẹ nipasẹ meeli. Ti o ba fẹ kaakiri ijabọ naa ni ọna miiran, iwọ ko nilo lati tọka wọn.

Nitorinaa, a ti ṣafikun awọn oniyipada ayika ti a nilo:

Bii o ṣe le ṣeto PVS-Studio ni Travis CI ni lilo emulator PSP gẹgẹbi apẹẹrẹ
Bayi jẹ ki a ṣẹda faili kan .travis.yml ati ki o gbe o ni root ti ise agbese. PPSSPP ti ni faili iṣeto ni tẹlẹ fun Travis CI, sibẹsibẹ, o tobi ju ati pe ko yẹ fun apẹẹrẹ, nitorinaa a ni lati jẹ ki o rọrun pupọ ki o fi awọn eroja ipilẹ silẹ nikan.

Ni akọkọ, jẹ ki a tọka ede naa, ẹya Ubuntu Linux ti a fẹ lati lo ninu ẹrọ foju, ati awọn idii pataki fun kikọ:

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'

Gbogbo awọn idii ti a ṣe akojọ ni a nilo ni iyasọtọ fun PPSSPP.

Bayi a tọkasi matrix ijọ:

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

Diẹ diẹ sii nipa apakan matrix. Ni Travis CI, awọn ọna meji wa lati ṣẹda awọn aṣayan kikọ: akọkọ ni lati ṣafihan atokọ ti awọn olupilẹṣẹ, awọn iru ẹrọ ṣiṣe, awọn oniyipada ayika, ati bẹbẹ lọ, lẹhin eyi matrix ti gbogbo awọn akojọpọ ti o ṣeeṣe ti ipilẹṣẹ; awọn keji jẹ ẹya fojuhan itọkasi ti awọn matrix. Nitoribẹẹ, o le darapọ awọn ọna meji wọnyi ki o ṣafikun ọran alailẹgbẹ kan, tabi, ni ilodi si, yọkuro rẹ ni lilo apakan aiṣe. O le ka diẹ sii nipa eyi ni Travis CI iwe.

Gbogbo ohun ti o ku ni lati pese awọn ilana apejọ kan pato-iṣẹ:

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 gba ọ laaye lati ṣafikun awọn aṣẹ tirẹ fun ọpọlọpọ awọn ipele ti igbesi aye ẹrọ foju kan. Abala ṣaaju_fi sori ẹrọ ṣiṣẹ ṣaaju fifi sori awọn idii. Lẹhinna fi sori ẹrọ, eyiti o tẹle fifi sori ẹrọ ti awọn idii lati atokọ naa addons.apteyi ti a tọka si loke. Awọn ijọ ara gba ibi ni akosile. Ti ohun gbogbo ba lọ daradara, lẹhinna a rii ara wa ninu lehin_aseyori (o jẹ ni yi apakan ti a yoo ṣiṣe aimi onínọmbà). Iwọnyi kii ṣe gbogbo awọn igbesẹ ti o le yipada, ti o ba nilo diẹ sii, lẹhinna o yẹ ki o wo inu Travis CI iwe.

Fun irọrun kika, awọn aṣẹ ni a gbe sinu iwe afọwọkọ lọtọ .travis.sh, eyi ti o ti gbe ni ise agbese root root.

Nitorinaa a ni faili atẹle .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

Ṣaaju fifi sori awọn idii, a yoo ṣe imudojuiwọn awọn submodules. Eyi nilo lati kọ PPSSPP. Jẹ ki a ṣafikun iṣẹ akọkọ si .travis.sh (ṣe akiyesi itẹsiwaju):

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

Bayi a wa taara lati ṣeto ifilọlẹ laifọwọyi ti PVS-Studio ni Travis CI. Ni akọkọ a nilo lati fi sori ẹrọ package PVS-Studio lori eto naa:

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
}

Ni ibẹrẹ iṣẹ naa travis_fi sori ẹrọ a fi sori ẹrọ awọn akopọ ti a nilo nipa lilo awọn oniyipada ayika. Nigbana ti o ba ti oniyipada $PVS_ANALYZE awọn itaja iye Bẹẹni (a tọka si ni apakan env nigba Kọ matrix iṣeto ni), a fi sori ẹrọ ni package pvs-isise. Ni afikun si eyi, awọn idii tun jẹ itọkasi libio-socket-ssl-perl и libnet-ssleay-perl, sibẹsibẹ, wọn nilo fun awọn esi ifiweranṣẹ, nitorina wọn ko ṣe pataki ti o ba ti yan ọna miiran fun jiṣẹ ijabọ rẹ.

Išẹ download_jade gbigba lati ayelujara ati ṣiṣafipamọ iwe ipamọ ti a sọ pato:

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

O to akoko lati fi ise agbese na papọ. Eyi ṣẹlẹ ni apakan akosile:

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
}

Ni otitọ, eyi jẹ atunto atilẹba ti o rọrun, ayafi fun awọn laini wọnyi:

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

Ni yi apakan ti koodu ti a ṣeto fun ṣe flag fun okeere akopo ase. Eyi jẹ pataki fun olutupalẹ koodu aimi. O le ka diẹ sii nipa eyi ninu nkan naa "Bii o ṣe le ṣiṣẹ PVS-Studio lori Lainos ati macOS".

Ti apejọ naa ba ṣaṣeyọri, lẹhinna a gba lati lehin_aseyori, nibiti a ti ṣe itupalẹ aimi:

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
}

Jẹ ki a ṣe akiyesi diẹ sii ni awọn ila wọnyi:

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

Laini akọkọ ṣe agbekalẹ faili iwe-aṣẹ lati orukọ olumulo ati bọtini ti a sọ ni ibẹrẹ ibẹrẹ nigbati o ṣeto awọn oniyipada agbegbe Travis CI.

Laini keji bẹrẹ itupalẹ taara. Flag -j kn awọn nọmba ti awon fun onínọmbà, flag -l tọkasi iwe-ašẹ, flag -o asọye faili fun o wu awọn àkọọlẹ, ati awọn Flag -disableLicenseExpirationCheck beere fun awọn ẹya idanwo, niwon nipasẹ aiyipada pvs-isise-itupalẹ yoo kilo fun olumulo pe iwe-aṣẹ ti fẹrẹ pari. Lati yago fun eyi lati ṣẹlẹ, o le pato asia yii.

Faili log ni iṣelọpọ aise ti ko le ka laisi iyipada, nitorinaa o gbọdọ kọkọ jẹ ki faili le ṣee ka. Jẹ ká ṣe awọn àkọọlẹ nipasẹ plog-iyipada, ati abajade jẹ faili html.

Ni apẹẹrẹ yii, Mo pinnu lati firanṣẹ awọn ijabọ nipasẹ meeli nipa lilo aṣẹ naa imeeli.

Bi abajade, a ni faili atẹle .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;

Bayi o to akoko lati Titari awọn ayipada si ibi ipamọ git, lẹhin eyiti Travis CI yoo ṣiṣẹ kọ laifọwọyi. Tẹ “ppsspp” lati lọ si awọn ijabọ kikọ:

Bii o ṣe le ṣeto PVS-Studio ni Travis CI ni lilo emulator PSP gẹgẹbi apẹẹrẹ
A yoo wo akopọ ti kikọ lọwọlọwọ:

Bii o ṣe le ṣeto PVS-Studio ni Travis CI ni lilo emulator PSP gẹgẹbi apẹẹrẹ
Ti o ba ti pari ni aṣeyọri, a yoo gba imeeli pẹlu awọn abajade ti itupalẹ aimi. Dajudaju, fifiranṣẹ kii ṣe ọna kan ṣoṣo lati gba ijabọ kan. O le yan eyikeyi ọna imuse. Ṣugbọn o ṣe pataki lati ranti pe lẹhin ti ikole ti pari, kii yoo ṣee ṣe lati wọle si awọn faili ẹrọ foju.

Lakotan aṣiṣe

A ti pari ni aṣeyọri apakan ti o nira julọ. Bayi jẹ ki a rii daju pe gbogbo akitiyan wa tọ si. Jẹ ki a wo diẹ ninu awọn aaye ti o nifẹ lati ijabọ itupalẹ aimi ti o wa si mi nipasẹ meeli (kii ṣe lasan ni MO tọka si).

Imudara ti o lewu

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

Ikilọ PVS-Studio: V597 Olupilẹṣẹ le pa ipe iṣẹ 'memset' rẹ, eyiti o jẹ lilo lati ṣan 'apapọ' ifipamọ. Iṣẹ RtlSecureZeroMemory() yẹ ki o lo lati nu data ikọkọ naa. sha1.cpp 325

Nkan koodu yii wa ninu module hashing to ni aabo, sibẹsibẹ, o ni abawọn aabo to ṣe pataki (CWE-14). Jẹ ki a wo atokọ apejọ ti o jẹ ipilẹṣẹ nigbati o n ṣajọ ẹya atunkọ:

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

Ohun gbogbo wa ni ibere ati iṣẹ iranti ti wa ni pa, nitorina ìkọlélórí pataki data ni Ramu, sibẹsibẹ, ma yọ o kan sibẹsibẹ. Jẹ ki a wo atokọ apejọ ti ẹya Tu silẹ pẹlu iṣapeye:

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

Gẹgẹbi a ti le rii lati atokọ naa, alakojo kọju ipe naa iranti. Eyi jẹ nitori otitọ pe ninu iṣẹ naa Oju 1 lẹhin ipe iranti ko si siwaju sii tọka si be ctx. Nitorina, awọn alakojo ri ko si ojuami ni a jafara isise akoko ìkọlélórí iranti ti o ti wa ni ko lo ni ojo iwaju. O le ṣatunṣe eyi nipa lilo iṣẹ naa RtlSecureZeroMemory tabi jọra fún un.

Ti o tọ:

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

Ifiwera ti ko wulo

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

Ikilọ PVS-Studio: V547 Ikosile 'leftvol> = 0' jẹ otitọ nigbagbogbo. sceAudio.cpp 120

San ifojusi si ẹka miiran fun igba akọkọ if. Awọn koodu yoo wa ni ṣiṣẹ nikan ti o ba gbogbo awọn ipo osi> 0xFFFF || rightvol> 0xFFFF || osi <0 || apa ọtun <0 yoo tan jade lati wa ni eke. Nitorinaa, a gba awọn alaye wọnyi, eyiti yoo jẹ otitọ fun ẹka miiran: osi <= 0xFFFF, ọtunvol <= 0xFFFF, osi>= 0 и ọtunvol>= 0. Ṣe akiyesi awọn gbolohun meji ti o kẹhin. Ṣe o jẹ oye lati ṣayẹwo kini ipo pataki fun ipaniyan nkan ti koodu yii?

Nitorinaa a le yọkuro awọn alaye majemu wọnyi lailewu:

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

Oju iṣẹlẹ miiran. Iru aṣiṣe kan wa ti o farapamọ lẹhin awọn ipo laiṣe wọnyi. Boya wọn ko ṣayẹwo ohun ti a beere.

Konturolu + C Ctrl + V kọlu Pada

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 Awọn ikosile-ipin kanna wa '!Memory::IsValidAddress(psmfData)' si apa osi ati si ọtun ti '||' onišẹ. scePsmf.cpp 703

San ifojusi si ayẹwo inu if. Ṣe o ko ro pe o jẹ ajeji pe a ṣayẹwo ti adirẹsi naa ba wulo? psmfData, lemeji bi Elo? Nitorinaa eyi dabi ajeji si mi… Ni otitọ, eyi jẹ, nitorinaa, typo kan, ati pe imọran ni lati ṣayẹwo awọn aye titẹ sii mejeeji.

Aṣayan ti o tọ:

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

Oniyipada gbagbe

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

Ikilọ PVS-Studio: V547 Ikosile 'iwọn == 8' jẹ eke nigbagbogbo. syn-att.c 195

Aṣiṣe yii wa ninu folda naa ext, nitorina ko ṣe pataki si iṣẹ akanṣe naa, ṣugbọn a ti rii kokoro naa ṣaaju ki Mo ṣe akiyesi rẹ, nitorinaa Mo pinnu lati lọ kuro. Lẹhinna, nkan yii kii ṣe nipa atunwo awọn aṣiṣe, ṣugbọn nipa iṣọpọ pẹlu Travis CI, ati pe ko si iṣeto ti olutupalẹ ti a ṣe.

Oniyipada iwọn ti wa ni ipilẹṣẹ nipasẹ ibakan, sibẹsibẹ, ko lo ni gbogbo koodu, ọtun si isalẹ lati oniṣẹ if, eyi ti, dajudaju, yoo fun èké lakoko ti o n ṣayẹwo awọn ipo, nitori, bi a ṣe ranti, iwọn dogba si odo. Awọn sọwedowo atẹle tun ko ni oye.

Nkqwe, awọn onkowe ti awọn koodu ajeku gbagbe lati tun oniyipada iwọn ṣaaju pe.

Duro

Eyi ni ibiti a ti le pari pẹlu awọn aṣiṣe. Idi ti nkan yii ni lati ṣafihan iṣẹ ti PVS-Studio papọ pẹlu Travis CI, kii ṣe itupalẹ iṣẹ naa daradara bi o ti ṣee. Ti o ba fẹ awọn aṣiṣe nla ati lẹwa diẹ sii, o le ṣe ẹwà nigbagbogbo wọn nibi :).

ipari

Lilo awọn iṣẹ wẹẹbu lati kọ awọn iṣẹ akanṣe pọ pẹlu iṣe ti itupalẹ afikun gba ọ laaye lati wa ọpọlọpọ awọn iṣoro lẹsẹkẹsẹ lẹhin koodu idapọ. Bibẹẹkọ, kikọ kan le ma to, nitorinaa iṣeto idanwo papọ pẹlu itupalẹ aimi yoo mu didara koodu naa pọ si ni pataki.

wulo awọn ọna asopọ

Bii o ṣe le ṣeto PVS-Studio ni Travis CI ni lilo emulator PSP gẹgẹbi apẹẹrẹ

Ti o ba fẹ pin nkan yii pẹlu awọn olugbo ti o sọ Gẹẹsi, jọwọ lo ọna asopọ itumọ: Maxim Zvyagintsev. Bii o ṣe le ṣeto PVS-Studio ni Travis CI ni lilo apẹẹrẹ ti emulator console game PSP.

orisun: www.habr.com

Fi ọrọìwòye kun