Pehea e hoʻonohonoho ai i ka PVS-Studio ma Travis CI me ka hoʻohana ʻana i ka emulator PSP ma ke ʻano he laʻana

Pehea e hoʻonohonoho ai i ka PVS-Studio ma Travis CI me ka hoʻohana ʻana i ka emulator PSP ma ke ʻano he laʻana
He lawelawe pūnaewele ʻo Travis CI no ke kūkulu ʻana a me ka hoʻāʻo ʻana i nā polokalamu e hoʻohana ana iā GitHub ma ke ʻano he kumu hoʻokipa code. Ma kahi o nā hiʻohiʻona hana i luna, hiki iā ʻoe ke hoʻohui i kāu hoʻomaikaʻi ponoʻī i nā koho hoʻonohonoho ākea. Ma kēia ʻatikala e hoʻonohonoho mākou iā Travis CI e hana me PVS-Studio me ka hoʻohana ʻana i ka laʻana code PPSSPP.

Hōʻike

ʻO Travis CI he lawelawe pūnaewele no ke kūkulu ʻana a me ka hoʻāʻo ʻana i nā polokalamu. Hoʻohana maʻamau ia me nā hana hoʻohui mau.

PPSSPP - PSP pāʻani console emulator. Hiki i ka polokalamu ke hoʻohālike i ka hoʻomaka ʻana o nā pāʻani mai nā kiʻi disk i manaʻo ʻia no Sony PSP. Ua hoʻokuʻu ʻia ka papahana ma Nowemapa 1, 2012. Ua laikini ʻia ʻo PPSSPP ma lalo o GPL v2. Hiki i kekahi ke hoʻomaikaʻi i code kumu papahana.

ʻO PVS-Studio - he mea helu helu static no ka ʻimi ʻana i nā hewa a me nā nāwaliwali hiki ke loaʻa i ka code program. Ma kēiaʻatikala, no ka hoʻololiʻana, e hoʻomaka mākou i ka PVS-Studioʻaʻole i ka'āina ma ka mīkini o ka mea hoʻomohala, akā i ke ao, a nānā i nā hewa ma PPSSPP.

Hoʻonohonoho iā Travis CI

Pono mākou i kahi waihona ma GitHub, kahi i loaʻa ai ka papahana a mākou e pono ai, a me kahi kī no PVS-Studio (hiki iā ʻoe ke loaʻa. kī hoʻāʻo ai ole ia, manuahi no nā papahana Open Source).

E hele kāua i ka pūnaewele ʻO Travis CI. Ma hope o ka ʻae ʻia e hoʻohana ana i kāu moʻokāki GitHub, e ʻike mākou i kahi papa inoa o nā waihona:

Pehea e hoʻonohonoho ai i ka PVS-Studio ma Travis CI me ka hoʻohana ʻana i ka emulator PSP ma ke ʻano he laʻana
No ka hoʻāʻo, ua ʻoki au i ka PPSSPP.

Hoʻopau mākou i ka waihona a mākou e makemake ai e hōʻiliʻili:

Pehea e hoʻonohonoho ai i ka PVS-Studio ma Travis CI me ka hoʻohana ʻana i ka emulator PSP ma ke ʻano he laʻana
I kēia manawa, ʻaʻole hiki iā Travis CI ke kūkulu i kā mākou papahana no ka mea ʻaʻohe ʻōlelo kuhikuhi no ke kūkulu ʻana. No laila ua hiki i ka manawa no ka hoʻonohonoho.

I ka wā o ka hoʻopaʻa ʻana, e lilo kekahi mau mea hoʻololi iā mākou, no ka laʻana, ke kī no PVS-Studio, ʻaʻole makemake ʻia e wehewehe i ka faila hoʻonohonoho. No laila e hoʻohui kākou i nā ʻano hoʻololi kaiapuni me ka hoʻohana ʻana i nā hoʻonohonoho kūkulu ma Travis CI:

Pehea e hoʻonohonoho ai i ka PVS-Studio ma Travis CI me ka hoʻohana ʻana i ka emulator PSP ma ke ʻano he laʻana
E pono kāua:

  • PVS_USERNAME - inoa inoa
  • PVS_KEY - kī
  • MAIL_USER - leka uila e hoʻohana ʻia e hoʻouna i ka hōʻike
  • MAIL_PASSWORD - leka uila ʻōlelo huna

ʻO nā mea hope ʻelua he koho. E hoʻohana ʻia kēia e hoʻouna i nā hopena ma ka leka uila. Inā makemake ʻoe e puʻunaue i ka hōʻike ma kahi ʻano ʻē aʻe, ʻaʻole pono ʻoe e hōʻike iā lākou.

No laila, ua hoʻohui mākou i nā mea hoʻololi kaiapuni e pono ai mākou:

Pehea e hoʻonohonoho ai i ka PVS-Studio ma Travis CI me ka hoʻohana ʻana i ka emulator PSP ma ke ʻano he laʻana
I kēia manawa e hana kākou i faila .travis.yml a waiho i ke kumu o ka papahana. Ua loaʻa iā PPSSPP kahi faila hoʻonohonoho no Travis CI, akā naʻe, ua nui loa a kūpono ʻole no ka laʻana, no laila pono mākou e maʻalahi a waiho wale i nā mea kumu.

ʻO ka mea mua, e hōʻike i ka ʻōlelo, ka mana o Ubuntu Linux a mākou e makemake ai e hoʻohana i ka mīkini virtual, a me nā pūʻolo e pono ai no ke kūkulu ʻana:

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'

Pono nā pūʻolo āpau i helu ʻia no PPSSPP wale nō.

I kēia manawa, hōʻike mākou i ka matrix hui:

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

He wahi hou aku e pili ana i ka pauku Ke kumu. Ma Travis CI, ʻelua mau ala e hana ai i nā koho kūkulu: ʻo ka mea mua ke kuhikuhi i kahi papa inoa o nā mea hōʻuluʻulu, nā ʻano ʻōnaehana hana, nā ʻano hoʻololi kaiapuni, etc. ʻO ka lua, he hōʻailona maopopo o ka matrix. ʻOiaʻiʻo, hiki iā ʻoe ke hoʻohui i kēia mau ala ʻelua a hoʻohui i kahi hihia kūʻokoʻa, a i ʻole, e haʻalele iā ia me ka hoʻohana ʻana i ka ʻāpana. waihoʻia. Hiki iā ʻoe ke heluhelu hou aʻe e pili ana i kēia ma Nā palapala ʻo Travis CI.

ʻO nā mea a pau i koe e hāʻawi i nā ʻōlelo aʻoaʻo hui kikoʻī:

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

ʻAe ʻo Travis CI iā ʻoe e hoʻohui i kāu mau kauoha ponoʻī no nā pae like ʻole o ke ola o kahi mīkini virtual. Māhele before_install hana ʻia ma mua o ka hoʻokomo ʻana i nā pūʻolo. A laila e hoʻohui, e hahai ana i ka hoʻokomo ʻana i nā pūʻolo mai ka papa inoa addons.apta makou i hoike ai maluna. ʻO ka hui pono'ī e mālamaʻia ma kōmi'ōkuhi. Inā maikaʻi nā mea a pau, a laila ʻike mākou iā mākou iho after_success (ʻo ia ma kēia ʻāpana e holo ai mākou i ka loiloi static). ʻAʻole kēia nā ʻanuʻu āpau e hiki ke hoʻololi ʻia, inā makemake ʻoe i nā mea hou aku, a laila pono ʻoe e nānā i loko Nā palapala ʻo Travis CI.

No ka maʻalahi o ka heluhelu ʻana, ua kau ʻia nā kauoha i kahi palapala ʻokoʻa .travis.sh, i kau ʻia ma ke kumu o ka papahana.

No laila, loaʻa iā mākou kēia faila .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

Ma mua o ka hoʻokomo ʻana i nā pūʻolo, e hōʻano hou mākou i nā submodules. Pono kēia e kūkulu i ka PPSSPP. E hoʻohui i ka hana mua i .travis.sh (e nānā i ka hoʻonui):

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

I kēia manawa hele pololei mākou i ka hoʻonohonoho ʻana i ka hoʻomaka ʻana o PVS-Studio ma Travis CI. Pono mua mākou e hoʻokomo i ka pā PVS-Studio ma ka ʻōnaehana:

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 ka hoomaka ana o ka hana travis_install hoʻokomo mākou i nā mea hōʻuluʻulu e pono ai mākou me ka hoʻohana ʻana i nā mea hoʻololi kaiapuni. A laila inā hoʻololi $PVS_ANALYZE waiwai kūʻai ʻAe (Ua hōʻike mākou ma ka ʻāpana ʻelele i ka wā kūkulu matrix hoʻonohonoho), hoʻokomo mākou i ka pōʻai pvs-studio. Ma waho aʻe o kēia, hōʻike ʻia nā pūʻolo libio-socket-ssl-perl и libnet-ssleay-perl, akā naʻe, koi ʻia lākou no ka hoʻouna ʻana i nā hopena, no laila ʻaʻole pono inā ua koho ʻoe i kahi ala ʻē aʻe no ka lawe ʻana i kāu hōʻike.

kuleana pili i download_extract hoʻoiho a wehe i ka waihona i ʻōlelo ʻia:

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

ʻO ka manawa kēia e hoʻohui i ka papahana. Hana ʻia kēia ma ka ʻāpana kōmi'ōkuhi:

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
}

ʻOiaʻiʻo, he hoʻonohonoho kumu maʻalahi kēia, koe wale nō kēia mau laina:

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

Ma kēia ʻāpana o ke code a mākou i hoʻonohonoho ai cmake hae no ka lawe ʻana i nā kauoha hōʻuluʻulu. He mea pono kēia no ka helu helu static. Hiki iā ʻoe ke heluhelu hou aʻe e pili ana i kēia ma ka ʻatikala "Pehea e holo ai i ka PVS-Studio ma Linux a me macOS".

Inā lanakila ka ʻaha, a laila hiki mākou i after_success, kahi e hana ai mākou i ka nānā ʻana 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
}

E nānā pono kākou i kēia mau laina:

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

Hoʻopuka ka laina mua i kahi faila laikini mai ka inoa inoa a me ke kī a mākou i kuhikuhi ai i ka hoʻomaka ʻana i ka hoʻonohonoho ʻana i nā ʻano hoʻololi kaiapuni Travis CI.

Hoʻomaka pololei ka laina ʻelua i ka nānā ʻana. Hae -j hoʻonohonoho i ka helu o nā kaula no ka nānā ʻana, hae -l hōʻike i ka laikini, hae -o wehewehe i ka faila no ka hoʻopuka ʻana i nā lāʻau, a me ka hae -disableLicenseExpirationCheck koi ʻia no nā mana hoʻāʻo, ʻoiai ma ka paʻamau pvs-studio-analyzer e aʻo aku i ka mea hoʻohana ua kokoke e pau ka laikini. No ka pale ʻana i kēia, hiki iā ʻoe ke kuhikuhi i kēia hae.

Loaʻa i ka faila log nā mea hoʻopuka maka ʻaʻole hiki ke heluhelu ʻia me ka ʻole o ka hoʻololi ʻana, no laila pono ʻoe e hana mua i ka faila i hiki ke heluhelu ʻia. E hele kāua i nā lāʻau mea hoʻololi-palapala, a he waihona html ka puka.

Ma kēia laʻana, ua hoʻoholo wau e hoʻouna i nā hōʻike ma ka leka uila me ka hoʻohana ʻana i ke kauoha leka uila.

ʻO ka hopena, ua loaʻa iā mākou kēia faila .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;

ʻO ka manawa kēia e pana i nā hoʻololi i ka waihona git, a laila e holo maʻalahi ʻo Travis CI i ke kūkulu. Kaomi ma ka "ppsspp" e hele i nā hōʻike kūkulu:

Pehea e hoʻonohonoho ai i ka PVS-Studio ma Travis CI me ka hoʻohana ʻana i ka emulator PSP ma ke ʻano he laʻana
E ʻike mākou i kahi hiʻohiʻona o ka hale o kēia manawa:

Pehea e hoʻonohonoho ai i ka PVS-Studio ma Travis CI me ka hoʻohana ʻana i ka emulator PSP ma ke ʻano he laʻana
Inā hoʻopau maikaʻi ʻia ke kūkulu ʻana, e loaʻa iā mākou kahi leka uila me nā hopena o ka loiloi static. ʻOiaʻiʻo, ʻaʻole ʻo ka leka uila wale nō ke ala e loaʻa ai kahi hōʻike. Hiki iā ʻoe ke koho i kekahi ʻano hoʻokō. Akā he mea nui e hoʻomanaʻo ma hope o ka pau ʻana o ke kūkulu ʻana, ʻaʻole hiki ke komo i nā faila mīkini virtual.

Hōʻuluʻulu kuhi hewa

Ua hoʻopau maikaʻi mākou i ka hapa paʻakikī loa. I kēia manawa, e hōʻoia kākou i ka pono o kā mākou mau hana a pau. E nānā kākou i kekahi mau mea hoihoi mai ka hōʻike ʻana i ka static analysis i hiki mai iaʻu ma ka leka uila (ʻaʻole no ka mea ʻole aʻu i hōʻike ai).

ʻO ka hoʻonui ʻana i ka pōʻino

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

ʻŌlelo aʻo PVS-Studio: V597 Hiki i ka mea hōʻuluʻulu ke hoʻopau i ka 'memset' function call, kahi i hoʻohana ʻia e holoi i ka 'sum' buffer. Pono e hoʻohana ʻia ka hana RtlSecureZeroMemory() e holoi i ka ʻikepili pilikino. sha1.cpp 325

Aia kēia ʻāpana code i loko o ka module hashing paʻa, akā naʻe, loaʻa iā ia kahi kīnā palekana koʻikoʻi (CWE-14). E nānā i ka papa inoa hui i hana ʻia i ka wā e hōʻuluʻulu ai i ka mana Debug:

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

Pono nā mea a pau a me ka hana memeset ua hoʻokō ʻia, a laila e kākau i ka ʻikepili koʻikoʻi i ka RAM, akā naʻe, mai hauʻoli i kēia manawa. E nānā i ka papa inoa hui o ka mana hoʻokuʻu me ka optimization:

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

E like me ka mea i ʻike ʻia mai ka papa inoa, ʻaʻole i mālama ka mea hoʻopili i ke kelepona memeset. ʻO kēia ma muli o ka mea i loko o ka hana sha1 mahope o ke kahea ana memeset ʻaʻohe mea e pili ana i ka hale ʻāpana. No laila, ʻaʻole ʻike ka mea hōʻuluʻulu i kahi kumu o ka hoʻopau ʻana i ka manawa o ka mea hana ma ke kākau ʻana i ka hoʻomanaʻo i hoʻohana ʻole ʻia i ka wā e hiki mai ana. Hiki iā ʻoe ke hoʻoponopono i kēia me ka hoʻohana ʻana i ka hana RtlSecureZeroMemory ai ole ia, like ia ia.

Ua pololei:

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

Hoʻohālikelike pono ʻole

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

ʻŌlelo aʻo PVS-Studio: V547 ʻOiaʻiʻo mau ka ʻōlelo 'leftvol >= 0'. sceAudio.cpp 120

E nānā i ka lālā ʻē aʻe no ka mua if. E hoʻokō ʻia ke code inā nā kūlana āpau voli hema > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || ponovol < 0 e hoʻopunipuni. No laila, loaʻa iā mākou nā ʻōlelo aʻe, e ʻoiaʻiʻo no ka lālā ʻē aʻe: voli hema <= 0xFFFF, ʻākau pono <= 0xFFFF, voli hema >= 0 и ʻākau ʻākau >= 0. E nānā i nā ʻōlelo hope ʻelua. He mea kūpono ke nānā i ke ʻano kūpono no ka hoʻokō ʻana i kēia ʻāpana code?

No laila hiki iā mākou ke wehe palekana i kēia mau ʻōlelo kūlana:

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 kekahi hiʻohiʻona. Aia kekahi ʻano hewa i hūnā ʻia ma hope o kēia mau kūlana redundant. ʻAʻole paha lākou i nānā i ka mea e pono ai.

Ctrl+C Ctrl+V Hoʻi hope

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 Aia nā mana'o like '!Memory::IsValidAddress(psmfData)' ma ka hema a ma ka ʻākau o ka '||' mea hoʻohana. scePsmf.cpp 703

E noʻonoʻo i ka nānā i loko if. ʻAʻole ʻoe e manaʻo he mea kupanaha ke nānā mākou inā pololei ka helu wahi? psmfData, pālua ka nui? No laila, he mea ʻē kēia iaʻu ... ʻOiaʻiʻo, ʻoiaʻiʻo, he typo kēia, a ʻo ka manaʻo e nānā i nā ʻāpana komo ʻelua.

Koho pololei:

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

Hoʻololi poina

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

ʻŌlelo aʻo PVS-Studio: V547 'Ōlelo 'nui == 8' hewa mau. syn-att.c 195

Aia kēia hewa i loko o ka waihona ext, no laila ʻaʻole pili pono i ka papahana, akā ua loaʻa ka bug ma mua o koʻu ʻike ʻana, no laila ua hoʻoholo wau e haʻalele. Ma hope o nā mea a pau, ʻaʻole kēia ʻatikala e pili ana i ka nānā ʻana i nā hewa, akā e pili ana i ka hoʻohui ʻana me Travis CI, a ʻaʻole i hoʻokō ʻia ka hoʻonohonoho ʻana o ka mea nānā.

Nā ʻano ka nui ua hoʻomaka ʻia e ka mea mau, akā naʻe, ʻaʻole i hoʻohana ʻia ma ke code, a hiki i ka mea hoʻohana if, ka mea, hāʻawi wahahee i ka nānā ʻana i nā kūlana, no ka mea, ke hoʻomanaʻo nei mākou, ka nui like me ka ʻole. ʻAʻohe manaʻo o ka nānā ʻana ma hope.

ʻIke ʻia, ua poina ka mea kākau o ka ʻāpana code i ke kākau ʻana i ka loli ka nui ma mua o kēlā.

hooki

ʻO kēia kahi e pau ai mākou me nā hewa. ʻO ke kumu o kēia ʻatikala e hōʻike i ka hana a PVS-Studio me Travis CI, a ʻaʻole e nānā pono i ka papahana e like me ka hiki. Inā makemake ʻoe i nā hewa nui a nani hoʻi, hiki iā ʻoe ke mahalo mau iā lākou maanei :. '

hopena

ʻO ka hoʻohana ʻana i nā lawelawe pūnaewele e kūkulu i nā papahana me ka hoʻomaʻamaʻa ʻana i ka loiloi incremental hiki iā ʻoe ke ʻimi i nā pilikia he nui ma hope koke o ka hoʻohui ʻana i nā code. Eia nō naʻe, ʻaʻole lawa ka hale hoʻokahi, no laila ʻo ka hoʻonohonoho ʻana i ka hoʻāʻo ʻana me ka loiloi static e hoʻomaikaʻi nui i ka maikaʻi o ke code.

nā loulou pono

Pehea e hoʻonohonoho ai i ka PVS-Studio ma Travis CI me ka hoʻohana ʻana i ka emulator PSP ma ke ʻano he laʻana

Inā makemake ʻoe e kaʻana like i kēia ʻatikala me kahi anaina ʻōlelo Pelekania, e ʻoluʻolu e hoʻohana i ka loulou unuhi: Maxim Zvyagintsev. Pehea e hoʻonohonoho ai i ka PVS-Studio ma Travis CI me ka hoʻohana ʻana i ka laʻana o PSP game console emulator.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka