Otu esi ahazi PVS-Studio na Travis CI site na iji ihe atụ nke emulator egwuregwu egwuregwu PSP

Otu esi ahazi PVS-Studio na Travis CI site na iji ihe atụ nke emulator egwuregwu egwuregwu PSP
Travis CI bụ ọrụ webụ na-ekesa maka iwulite na nnwale ngwanrọ na-eji GitHub dị ka nnabata koodu isi mmalite. Na mgbakwunye na ọnọdụ arụ ọrụ dị n'elu, ị nwere ike ịgbakwunye ekele gị maka nhọrọ nhazi sara mbara. N'isiokwu a, anyị ga-ahazi Travis CI ka ọ rụọ ọrụ na PVS-Studio site na iji ihe atụ koodu PPSSPP.

Okwu Mmalite

Travis C.I. bụ ọrụ webụ maka iwulite na nnwale ngwanrọ. A na-ejikarị ya eme ihe na njikọ na-aga n'ihu na-ejikọta ya na omume.

PPSSPP - PSP egwuregwu console emulator. Mmemme ahụ nwere ike iṅomi mmalite nke egwuregwu ọ bụla sitere na onyonyo diski ezubere maka Sony PSP. E wepụtara mmemme ahụ na November 1, 2012. PPSSPP nwere ikikere n'okpuru GPL v2. Onye ọ bụla nwere ike imeziwanye ya koodu isi mmalite oru ngo.

PVS-.lọ nka - onye nyocha koodu static maka ịchọ mperi na adịghị ike na koodu mmemme. N'isiokwu a, maka mgbanwe, anyị ga-amalite PVS-Studio ọ bụghị na mpaghara na igwe mmepụta ihe, ma na ígwé ojii, ma chọọ maka njehie na PPSSPP.

Ịtọlite ​​​​Travis CI

Anyị ga-achọ ebe nchekwa na GitHub, ebe ọrụ anyị chọrọ dị, yana igodo maka PVS-Studio (ị nwere ike nweta). igodo nnwale ma ọ bụ n'efu maka ọrụ Open Source).

Ka anyị gaa na saịtị ahụ Travis C.I.. Mgbe ikike iji akaụntụ GitHub gị, anyị ga-ahụ ndepụta nke ebe nchekwa:

Otu esi ahazi PVS-Studio na Travis CI site na iji ihe atụ nke emulator egwuregwu egwuregwu PSP
Maka ule ahụ, agbaghara m PPSSPP.

Anyị na-arụ ọrụ ebe nchekwa anyị chọrọ ịnakọta:

Otu esi ahazi PVS-Studio na Travis CI site na iji ihe atụ nke emulator egwuregwu egwuregwu PSP
N'oge a, Travis CI enweghị ike ịrụ ọrụ anyị n'ihi na enweghị ntuziaka maka iwu ụlọ. Ya mere ọ bụ oge nhazi.

N'oge nyocha, ụfọdụ mgbanwe ga-abara anyị uru, dịka ọmụmaatụ, igodo maka PVS-Studio, nke na-agaghị achọ ịkọwapụta na faịlụ nhazi. Yabụ ka anyị gbakwunye mgbanwe gburugburu ebe obibi site na iji ntọala ntọala na Travis CI:

Otu esi ahazi PVS-Studio na Travis CI site na iji ihe atụ nke emulator egwuregwu egwuregwu PSP
Anyị kwesịrị:

  • PVS_USERNAME - aha njirimara
  • PVS_KEY - igodo
  • MAIL_USER - ozi-e nke a ga-eji zipu akụkọ
  • MAIL_PASSWORD - paswọọdụ email

Abụọ ikpeazụ bụ nhọrọ. A ga-eji ndị a zipu rịzọlt site na ozi. Ọ bụrụ na ịchọrọ ikesa akụkọ ahụ n'ụzọ ọzọ, ịkwesighi igosi ha.

Yabụ, anyị agbakwunyela mgbanwe gburugburu ebe anyị chọrọ:

Otu esi ahazi PVS-Studio na Travis CI site na iji ihe atụ nke emulator egwuregwu egwuregwu PSP
Ugbu a, ka anyị mepụta faịlụ .travis.yml ma tinye ya na mgbọrọgwụ nke oru ngo. PPSSPP enweelarị faịlụ nhazi maka Travis CI, Otú ọ dị, ọ dị oke ibu ma bụrụ nke na-ekwesịghị ekwesị maka ihe atụ, ya mere anyị ga-eme ka ọ dịkwuo mfe ma hapụ naanị ihe ndị bụ isi.

Nke mbụ, ka anyị gosi asụsụ, ụdị Ubuntu Linux nke anyị chọrọ iji na igwe mebere, yana ngwugwu ndị dị mkpa maka iwulite:

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'

Ngwungwu niile edepụtara dị mkpa naanị maka PPSSPP.

Ugbu a, anyị na-egosi matrix mgbakọ:

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

Obere ihe gbasara ngalaba matriks. Na Travis CI, e nwere ụzọ abụọ iji mepụta nhọrọ nrụpụta: nke mbụ bụ ịkọwapụta ndepụta nke ndị nchịkọta, ụdị sistemụ arụmọrụ, mgbanwe gburugburu ebe obibi, wdg, mgbe nke a gasịrị, a na-emepụta matrix nke njikọ niile nwere ike ime; nke abụọ bụ ihe ngosi doro anya nke matriks. N'ezie, ị nwere ike ijikọta ụzọ abụọ a ma gbakwunye otu ikpe pụrụ iche, ma ọ bụ, n'ụzọ megidere ya, wepụ ya site na iji ngalaba. wepu. Ị nwere ike ịgụkwu gbasara nke a na Travis CI akwụkwọ.

Naanị ihe fọdụrụ bụ ịnye ntuziaka mgbakọ akọwapụtara maka ọrụ:

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 na-enye gị ohere ịgbakwunye iwu nke gị maka ọkwa dị iche iche nke ndụ igwe mebere. Ngalaba tupu wụnye gburu tupu wụnye ngwugwu. Mgbe ahụ tinye, nke na-esote ntinye nke ngwugwu site na listi ahụ addons.aptnke anyị gosiri n'elu. Nzukọ n'onwe ya na-ewere ọnọdụ script. Ọ bụrụ na ihe niile gara nke ọma, mgbe ahụ anyị na-ahụ onwe anyị mgbe_aga nke ọma (ọ bụ na ngalaba a ka anyị ga-eme nyocha static). Ihe ndị a abụghị usoro niile enwere ike ịmegharị, ọ bụrụ na ịchọrọ karịa, yabụ ị ga-elele Travis CI akwụkwọ.

Maka ịdị mfe ọgụgụ, etinyere iwu ndị a na edemede dị iche .travis.sh, nke a na-etinye na mgbọrọgwụ oru ngo.

Ya mere, anyị nwere faịlụ na-esonụ .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

Tupu ịwụnye ngwugwu, anyị ga-emelite submodules. Nke a dị mkpa iji wuo PPSSPP. Ka anyị tinye ọrụ mbụ na .travis.sh (Cheta ndọtị ahụ):

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

Ugbu a, anyị na-abịa ozugbo ịtọ ntọala PVS-Studio akpaka na Travis CI. Mbụ anyị kwesịrị ịwụnye ngwugwu PVS-Studio na sistemụ:

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
}

Na mmalite nke ọrụ travis_install anyị na-etinye ndị nchịkọta anyị chọrọ iji mgbanwe gburugburu ebe obibi. Mgbe ahụ ọ bụrụ na agbanwe agbanwe $PVS_ANALYZE na-echekwa uru Ee (anyị gosiri ya na ngalaba ihe ruru n'oge nhazi nhazi matrix), anyị na-etinye ngwugwu ahụ pvs-studio. Na mgbakwunye na nke a, a na-egosipụtakwa ngwugwu libio-socket-ssl-perl и libnet-ssleay-perl, Otú ọ dị, a chọrọ ha maka nsonaazụ nzipu ozi, yabụ na ha adịghị mkpa ma ọ bụrụ na ị họrọla usoro ọzọ maka ịnye akụkọ gị.

ọrụ download_extract budata ma bupu ngwugwu a kapịrị ọnụ:

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

Ọ bụ oge ijikọ ọrụ ọnụ. Nke a na-eme na ngalaba script:

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
}

N'ezie, nke a bụ nhazi izizi dị mfe, ewezuga ahịrị ndị a:

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

N'akụkụ a nke koodu anyị setịpụrụ maka imma ọkọlọtọ maka mbupụ iwu mkpokọta. Nke a dị mkpa maka onye nyocha koodu static. Ị nwere ike ịgụkwu banyere nke a n'isiokwu "Otu esi agba PVS-Studio na Linux na macOS".

Ọ bụrụ na mgbakọ ahụ gara nke ọma, mgbe ahụ, anyị ga-aga mgbe_aga nke ọma, ebe anyị na-eme nyocha 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
}

Ka anyị lebakwuo anya na ahịrị ndị a:

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

Ahịrị nke mbụ na-ewepụta faịlụ ikike site na aha njirimara na igodo anyị akọwapụtara na mbido mgbe ị na-edozi mgbanwe gburugburu Travis CI.

Ahịrị nke abụọ na-amalite nyocha ozugbo. Ọkọlọtọ -j na-esetịpụ ọnụ ọgụgụ nke eri maka nyocha, ọkọlọtọ -l na-egosi ikike, ọkọlọtọ -o na-akọwa faịlụ maka mmepụta ndekọ, yana ọkọlọtọ - gbanyụọ LicenseExpirationCheck achọrọ maka ụdị nnwale, ebe ọ bụ na ndabara pvs-studio-analyzer ga-adọ onye ọrụ aka na ntị na akwụkwọ ikike ahụ na-achọ ịgwụ. Iji gbochie nke a ime, ị nwere ike ịkọwa ọkọlọtọ a.

Faịlụ ndekọ nwere mmepụta nke enweghị ike ịgụ na-enweghị ntụgharị, yabụ ị ga-ebu ụzọ mee ka faịlụ ahụ nwee ike ịgụ ya. Ka anyị gafere akwụkwọ ndekọ plog-ngbanwe, na mmepụta bụ faịlụ HTML.

N'ihe atụ a, ekpebiri m izipu akụkọ site na mail site na iji iwu ahụ ozi ozi.

N'ihi ya, anyị nwetara faịlụ na-esonụ .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;

Ugbu a ọ bụ oge ịkwanye mgbanwe na ebe nchekwa git, mgbe nke ahụ gasịrị Travis CI ga-arụ ọrụ ahụ ozugbo. Pịa na "ppsspp" ka ịga na akụkọ nrụpụta:

Otu esi ahazi PVS-Studio na Travis CI site na iji ihe atụ nke emulator egwuregwu egwuregwu PSP
Anyị ga-ahụ nkọwa nke ihe owuwu ugbu a:

Otu esi ahazi PVS-Studio na Travis CI site na iji ihe atụ nke emulator egwuregwu egwuregwu PSP
Ọ bụrụ na arụchara ụlọ ahụ nke ọma, anyị ga-enweta ozi-e nwere nsonaazụ nyocha nke static. N'ezie, ọ bụghị naanị izipu ozi bụ ụzọ isi nweta akụkọ. Ị nwere ike ịhọrọ usoro mmejuputa iwu ọ bụla. Mana ọ dị mkpa icheta na mgbe emechara ụlọ ahụ, ọ gaghị ekwe omume ịnweta faịlụ igwe mebere.

Nchịkọta njehie

Anyị emechaala akụkụ kacha sie ike. Ugbu a, ka anyị hụ na mbọ anyị niile bara uru. Ka anyị leba anya n'ụfọdụ isi ihe na-atọ ụtọ site na akụkọ nyocha static nke bịakwutere m site na mail (ọ bụghị n'efu ka m gosiri ya).

Nkwalite dị ize ndụ

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

Ịdọ aka ná ntị PVS-Studio: V597 Onye nchịkọta ihe nwere ike ihichapụ oku ọrụ 'memset', nke a na-eji kpochapu ihe nchekwa 'nchikota'. Ekwesịrị iji ọrụ RtlSecureZeroMemory() ihichapụ data nkeonwe. sha1.cpp 325

Mpempe koodu a dị na modul hashing echedoro, agbanyeghị, o nwere nnukwu ntụpọ nchekwa (CWE-14). Ka anyị leba anya na ndepụta mgbakọ na-emepụta mgbe a na-achịkọta ụdị Debug:

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

Ihe niile dị n'usoro na ọrụ ncheta A na-egbu ya, si otú a na-edegharị data dị mkpa na RAM, agbanyeghị, aṅụrịla ọṅụ. Ka anyị leba anya na ndepụta mgbakọ nke ụdị mwepụta ahụ yana njikarịcha:

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

Dịka enwere ike ịhụ site na ndepụta ahụ, onye nchịkọta akụkọ leghaara oku a anya ncheta. Nke a bụ n'ihi na n'ime ọrụ ahụ sha1 mgbe okukuchara ncheta ọ dịghị ọzọ na-ezo aka Ọdịdị ctx. Ya mere, onye nchịkọta ahụ ahụghị uru ọ bụla n'imebi oge nhazi nke na-edegharị ebe nchekwa na-adịghị eji n'ọdịnihu. Ị nwere ike idozi nke a site na iji ọrụ ahụ RtlSecureZeroMemory ma ọ bụ nke yiri nye ya.

N'ụzọ ziri ezi:

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

Ntụnyere na-enweghị isi

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

Ịdọ aka ná ntị PVS-Studio: V547 Okwu 'leftvol> = 0' bụ eziokwu mgbe niile. sceAudio.cpp 120

Lezienụ anya na ngalaba nke ọzọ maka nke mbụ if. A ga-eme koodu ahụ naanị ma ọ bụrụ na ọnọdụ niile aka ekpe> 0xFFFF || rightvol> 0xFFFF || aka ekpe <0 || aka nri <0 ga-aghọ ụgha. Ya mere, anyị na-enweta nkwupụta ndị a, nke ga-abụ eziokwu maka ngalaba nke ọzọ: aka ekpe <= 0xFFFF, aka nri <= 0xFFFF, aka ekpe >= 0 и rightvol>= 0. Rịba ama okwu abụọ ikpeazụ. Ọ bụ ihe ezi uche dị na ya ịlele ihe dị mkpa ọnọdụ maka mmezu nke mpempe koodu a?

Yabụ na anyị nwere ike wepu okwu ndị a n'enweghị nsogbu:

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

Ihe atụ ọzọ. Enwere ụdị njehie zoro ezo n'azụ ọnọdụ ndị a na-adịghị arụ ọrụ. Ikekwe ha enyochaghị ihe achọrọ.

Ctrl+C Ctrl+V na-akụghachi azụ

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 Enwere okwu sub-nkwupụta '!Memory::IsValidAddress(psmfData)' n'aka ekpe na aka nri nke '||' onye ọrụ. scePsmf.cpp 703

Lezienụ anya na nlele n'ime if. Ị cheghị na ọ bụ ihe ijuanya na anyị na-elele ma adreesị ahụ ọ̀ dị irè? psmfData, okpukpu abụọ karịa? Ya mere, nke a dị ka ihe ijuanya nye m ... N'ezie, nke a bụ, n'ezie, typo, na echiche bụ ịlele ma ntinye ntinye.

Nhọrọ ziri ezi:

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

mgbanwe echefuru echefu

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

Ịdọ aka ná ntị PVS-Studio: V547 Okwu 'nha == 8' bụ ụgha mgbe niile. syn-at.c 195

Njehie a dị na folda ahụ wdg, Ya mere, ọ bụghị kpọmkwem maka ọrụ ahụ, mana ahụrụ ahụhụ ahụ tupu m achọpụta ya, ya mere ekpebiri m ịhapụ ya. A sị ka e kwuwe, isiokwu a abụghị maka nyochaa njehie, kama banyere ntinye aka na Travis CI, ọ dịghịkwa nhazi nke onye nyocha ahụ mere.

Mgbanwe size na-amalite site na mgbe niile, agbanyeghị, a naghị eji ya ma ọlị na koodu ahụ, ruo na onye ọrụ if, nke, n'ezie, na-enye ụgha mgbe ịlele ọnọdụ, n'ihi na, dị ka anyị na-echeta, size nhata ka efu. Nyocha ndị na-esote na-enweghịkwa isi.

N'ụzọ doro anya, onye dere ibe koodu ahụ chefuru idegharị mgbanwe ahụ size tupu nke ahụ.

Kwụsị

Nke a bụ ebe eleghị anya anyị ga-ejedebe na mmejọ. Ebumnuche nke isiokwu a bụ iji gosipụta ọrụ PVS-Studio yana Travis CI, ọ bụghị iji nyochaa ọrụ ahụ nke ọma dịka o kwere mee. Ọ bụrụ na ịchọrọ nnukwu mmejọ mara mma, ị nwere ike ịmasị ha mgbe niile ebe a :).

nkwubi

Iji ọrụ webụ rụọ ọrụ ọnụ yana omume nke nyocha mmụba na-enye gị ohere ịchọta ọtụtụ nsogbu ozugbo ị jikọtara koodu. Agbanyeghị, otu ụlọ nwere ike ọ gaghị ezuru, yabụ ịtọlite ​​​​nnwale yana nyocha static ga-eme ka koodu ahụ dịkwuo mma.

Njikọ ndị bara uru

Otu esi ahazi PVS-Studio na Travis CI site na iji ihe atụ nke emulator egwuregwu egwuregwu PSP

Ọ bụrụ na ịchọrọ ịkọrọ ndị na-ege ntị na-asụ Bekee akụkọ a, biko jiri njikọ ntụgharị asụsụ: Maxim Zvyagintsev. Otu esi edobe PVS-Studio na Travis CI site na iji ihe atụ nke emulator egwuregwu egwuregwu PSP.

isi: www.habr.com

Tinye a comment