Travis CI แแ แแก แแแแแฌแแแแแฃแแ แแแ แกแแ แแแกแ แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แจแแกแแฅแแแแแแ แแ แขแแกแขแแ แแแแกแแแแก, แ แแแแแแช แแงแแแแแก GitHub-แก, แ แแแแ แช แฌแงแแ แแก แแแแแก แฐแแกแขแแแแก. แแแแแแฆแแแจแแฃแแ แแแแ แแชแแฃแแ แกแชแแแแ แแแแก แแแ แแ, แจแแแแซแแแแ แแแแแแขแแ แแฅแแแแ แกแแแฃแแแ แ แแแแคแแแฃแ แแชแแแก แคแแ แแ แแแ แแแแขแ แแแแก แฌแงแแแแแแ. แแ แกแขแแขแแแจแ แฉแแแ แแแแแแแแคแแแฃแ แแ แแแ Travis CI-แก PVS-Studio-แกแแแ แแฃแจแแแแแกแแแแก PPSSPP แแแแแก แแแแแแแแแก แแแแแงแแแแแแ.
แจแแกแแแแแ
Travis CI-แแก แแแงแแแแแ
แฉแแแ แแแแแญแแ แแแแ แกแแชแแแ GitHub-แแ, แกแแแแช แแแแแแแกแแแฃแแแ แฉแแแแแแแก แกแแญแแ แ แแ แแแฅแขแ, แแกแแแ แแแกแแฆแแแ PVS-Studio-แกแแแแก (แจแแแแซแแแแ แแแแฆแแ
แแแแแ แแแแแแแแแ แกแแแขแแ
แขแแกแขแแกแแแแก, แแ แฉแแแแแแ PPSSPP.
แฉแแแ แแแแฅแขแแฃแ แแแ แกแแชแแแก, แ แแแแแก แจแแแ แแแแแ แแแแแแ:
แแ แแ แแแกแแแแก Travis CI แแแ แแแจแแแแแก แฉแแแแก แแ แแแฅแขแก, แ แแแแแ แแ แแ แกแแแแแก แแจแแแแแแแแแก แแแกแขแ แฃแฅแชแแ. แแกแ แ แแ, แแ แแ แแแแคแแแฃแ แแชแแแกแแแแก.
แแแแแแแแก แแ แแก แฉแแแแแแแก แกแแกแแ แแแแแ แแฅแแแแ แแแแแแ แแ แชแแแแแ, แแแแแแแแแ, แแแกแแฆแแแ PVS-Studio-แกแแแแก, แ แแแแแก แแแแแแแแแช แแ แแกแแกแฃแ แแแแ แแฅแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแจแ. แแแแแ แแแแแแแขแแ แแแ แแแแก แชแแแแแแแ Travis CI-แจแ build แแแ แแแแขแ แแแแก แแแแแงแแแแแแ:
แฉแแแ แแแญแแ แแแแ:
- PVS_USERNAME - แแแแฎแแแ แแแแแก แกแแฎแแแ
- PVS_KEY - แแแกแแฆแแแ
- MAIL_USER - แแแคแแกแขแ, แ แแแแแแช แแแแแงแแแแแฃแแ แแฅแแแแ แแแแแ แแจแแก แแแกแแแแแแแแ
- MAIL_PASSWORD - แแแคแแกแขแแก แแแ แแแ
แแแแ แแ แ แแ แฉแแแแแแ. แแกแแแ แแแแแงแแแแแฃแแ แแฅแแแแ แจแแแแแแแแก แคแแกแขแแ แแแกแแแแแแแแ. แแฃ แแกแฃแ แ แแแแแ แแจแแก แกแฎแแ แแแแ แแแแ แชแแแแแ, แแ แแญแแ แแแแแ แแแแ แแแแแแแแ.
แแกแ แ แแ, แฉแแแ แแแแแแแขแแ แแแ แแแแก แชแแแแแแแ, แ แแแแแแแช แแแญแแ แแแแ:
แแฎแแ แจแแแฅแแแแ แคแแแแ .travis.yml แแ แแแแแแแแกแแ แแแ แแ แแแฅแขแแก แซแแ แจแ. PPSSPP-แก แฃแแแ แฐแฅแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแ Travis CI-แกแแแแก, แแฃแแชแ, แแก แแงแ แซแแแแแ แแแแ แแ แกแ แฃแแแแ แฃแแแ แแแกแ แแแแแแแแแกแแแแก, แแแแขแแ แแแแแแฌแแ แแแกแ แแแแแ แแแแแ แขแแแแแ แแ แแฎแแแแ แซแแ แแแแแ แแแแแแแขแแแแก แแแขแแแแแ.
แแแ แแแ แ แแแจแ, แแแแแ แแแแฃแแแแแ แแแ, Ubuntu Linux-แแก แแแ แกแแ, แ แแแแแแช แแแแแแ แแแ แขแฃแแแฃแ แแแแฅแแแแจแ แแแแแแแงแแแแ แแ แแแแกแขแ แฃแฅแชแแแกแแแแก แกแแญแแ แ แแแแแขแแแ:
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'
แงแแแแ แฉแแแแแแแแแ แแแแแขแ แกแแญแแ แแ แแฅแกแแแฃแแแฃแ แแ PPSSPP-แกแแแแก.
แแฎแแ แฉแแแ แแแแฃแแแแแแ แจแแแ แแแแก แแแขแ แแชแแก:
matrix:
include:
- os: linux
compiler: "gcc"
env: PPSSPP_BUILD_TYPE=Linux PVS_ANALYZE=Yes
- os: linux
compiler: "clang"
env: PPSSPP_BUILD_TYPE=Linux
แชแแขแ แแแขแ แแแแงแแคแแแแแแก แจแแกแแฎแแ matrix. Travis CI-แจแ แแ แแก build-แแก แแคแชแแแแแก แจแแฅแแแแก แแ แ แแแ: แแแ แแแแ แแ แแก แแแแแแแแขแแ แแแแก แกแแแก, แแแแ แแชแแฃแแ แกแแกแขแแแแก แขแแแแแแก, แแแ แแแแก แชแแแแแแแแก แแ แ.แจ. แแแแแแแแ, แ แแก แจแแแแแแแช แฌแแ แแแแฅแแแแแ แงแแแแ แจแแกแแซแแ แแแแแแแแชแแแก แแแขแ แแชแ; แแแแ แ แแ แแก แแแขแ แแชแแก แแจแแแ แ แแแแแแแแ. แ แ แแฅแแ แฃแแแ, แจแแแแซแแแแ แแแแแแแจแแ แแ แแก แแ แ แแแแแแแ แแ แแแแแแขแแ แฃแแแแแแฃแ แ แจแแแแฎแแแแ, แแ, แแแ แแฅแแ, แแแแแ แแชแฎแแ แแแ แแแแงแแคแแแแแแก แแแแแงแแแแแแ แแแแแ แแชแฎแแแก. แแแแก แจแแกแแฎแแ แแแขแ แจแแแแซแแแแ แฌแแแแแแฎแแ แแฅ
แ แฉแแแ แแฎแแแแ แแ แแแฅแขแแก แกแแแชแแคแแแฃแ แ แจแแแ แแแแก แแแกแขแ แฃแฅแชแแแแแก แแแฌแแแแแ:
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 แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแขแแ แแฅแแแแ แกแแแฃแแแ แ แแ แซแแแแแแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แชแฎแแแ แแแแก แกแฎแแแแแกแฎแแ แแขแแแแ. แแแแงแแคแแแแแ แแแ แ_แแแกแขแแแแชแแ แจแแกแ แฃแแแแฃแแแ แแแแแขแแแแก แแแงแแแแแแแแ. แแแ แ แแแกแขแแแแชแแ, แ แแแแแแช แแแงแแแแ แกแแแแแ แแแแแขแแแแก แแแกแขแแแแชแแแก addons.aptแ แแช แแแแแ แแฆแแแแจแแแ. แแแแแ แจแแแ แแแ แฎแแแแ script. แแฃ แงแแแแแคแแ แ แแแ แแแ แฌแแแแแ, แแแจแแ แฉแแแ แแฆแแแแฉแแแแแแ แจแแแแแ_แฌแแ แแแขแแแ (แกแฌแแ แแ แแ แแแแงแแคแแแแแแจแ แฉแแแแขแแ แแแ แกแขแแขแแแฃแ แแแแแแแก). แแก แแ แแ แแก แงแแแแ แแก แแแแแฏแ, แ แแแแแแช แจแแแซแแแแ แจแแแชแแแแแก, แแฃ แแแขแ แแญแแ แแแแแ, แแแจแแ แฃแแแ แแแแแฎแแแแ
แแแแฎแแแก แกแแแแ แขแแแแกแแแแก แแ แซแแแแแแแ แแแแแแกแแ แชแแแแแฃแ แกแแ แแแขแจแ .แขแ แแแแก.แจ, แ แแแแแแช แแแแแแกแแแฃแแแ แแ แแแฅแขแแก แซแแ แจแ.
แแกแ แ แแ, แฉแแแ แแแแฅแแก แจแแแแแแ แคแแแแ .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
แแแแแขแแแแก แแแงแแแแแแแแ แฉแแแ แแแแแแแฎแแแแ แฅแแแแแแฃแแแแก. แแก แกแแญแแ แแ PPSSPP-แแก แแกแแจแแแแแแแ. แแแแแแแขแแ แแแ แแแแ แคแฃแแฅแชแแ .แขแ แแแแก.แจ (แแแแแแแแแกแฌแแแแ แแแคแแ แแแแแ):
travis_before_install() {
git submodule update --init --recursive
}
แแฎแแ แฉแแแ แแแ แแแแแ แแแแแแแแ แ PVS-Studio-แก แแแขแแแแขแฃแ แ แแแจแแแแแก แแแงแแแแแแแ Travis CI-แจแ. แฏแแ แกแแกแขแแแแแ แฃแแแ แแแแแงแแแแ PVS-Studio แแแแแขแ:
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_install แฉแแแ แแแแแกแขแแแแ แแแ แฉแแแแแแแก แกแแญแแ แ แจแแแแแแแแแแก แแแ แแแแก แชแแแแแแแแก แแแแแงแแแแแแ. แแแจแแ แแฃ แชแแแแแ $PVS_ANALYZE แแแแฎแแแก แฆแแ แแแฃแแแแแก แแแแฎ (แฉแแแ แแก แแฆแแแแจแแแ แแแแงแแคแแแแแแจแ env build matrix-แแก แแแแคแแแฃแ แแชแแแก แแ แแก), แฉแแแ แแแแแกแขแแแแ แแแ แแแแแขแก pvs-แกแขแฃแแแ. แแแ แแ แแแแกแ, แแแแแแแแฃแแแ แแแแแขแแแแช libio-socket-ssl-perl ะธ libnet-ssleay-perlแแฃแแชแ, แแกแแแ แกแแญแแ แแ แคแแกแขแแก แจแแแแแแแแกแแแแก, แแแแขแแ แแกแแแ แแ แแ แแก แกแแญแแ แ, แแฃ แแฅแแแ แแแ แฉแแแ แแฅแแแแ แแแแแ แแจแแก แแแฌแแแแแแก แกแฎแแ แแแแแแก.
แคแฃแแฅแชแแ แฉแแแแขแแแ แแแ_แแแแแแฌแแ แ แฉแแแแขแแแ แแแแก แแ แฎแกแแแก แแแแแแแแฃแ แแ แฅแแแก:
download_extract() {
aria2c -x 16 $1 -o $2
tar -xf $2
}
แแ แแ แแแแแแ แแแแแแ แแ แแแฅแขแ. แแก แฎแแแแ แแแแงแแคแแแแแแจแ 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
}
แกแแแแแแแแแแจแ, แแก แแ แแก แแแแแ แขแแแแแฃแแ แแ แแแแแแแฃแ แ แแแแคแแแฃแ แแชแแ, แแแ แแ แแ แฎแแแแแแกแ:
if [ "$PVS_ANALYZE" = "Yes" ]; then
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
fi
แแแแแก แแ แแแแงแแคแแแแแแจแ แฉแแแ แแแแแงแแแแ แกแแแแ แแ แแจแ แแแแแแแแชแแแก แแ แซแแแแแแแแก แแฅแกแแแ แขแแกแแแแก. แแก แแฃแชแแแแแแแแ แกแขแแขแแแฃแ แ แแแแแก แแแแแแแแขแแ แแกแแแแก. แแแแก แจแแกแแฎแแ แแแขแ แจแแแแซแแแแ แฌแแแแแแฎแแ แกแขแแขแแแจแ "
แแฃ แแกแแแแแแ แฌแแ แแแขแแแฃแแ แแงแ, แแแจแแ แแแแแฆแแแ แจแแแแแ_แฌแแ แแแขแแแ, แกแแแแช แแแกแ แฃแแแแ แกแขแแขแแแฃแ แแแแแแแก:
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
}
แแแแแ แฃแคแ แ แแฎแแแก แแแแฎแแแแ แจแแแแแ แกแขแ แแฅแแแแแก:
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
แแแ แแแแ แฎแแแ แแแแแแ แแ แแแก แแแชแแแแแแก แคแแแแก แแแแฎแแแ แแแแแก แกแแฎแแแแแแ แแ แแแกแแฆแแแแแแ, แ แแแแแแช แฉแแแ แแแแแแฃแกแขแแ แแแแแแแแแ Travis CI แแแ แแแแก แชแแแแแแแแก แแแงแแแแแแกแแก.
แแแแ แ แฎแแแ แแแ แแแแแ แแฌแงแแแก แแแแแแแก. แแ แแจแ -แฏ แแแแแแก แซแแคแแแแก แ แแแแแแแแแก แแแแแแแแกแแแแก, แแ แแจแ -แ แแแฃแแแแแแก แแแชแแแแแ, แแ แแจแ -แ แแแแกแแแฆแแ แแแก แคแแแแก แแฃแ แแแแแแแก แแแแแกแแขแแแแ แแ แแ แแจแแก -แแแแแ แแแ แแแชแแแแแแก แแแกแแแแก แจแแแแฌแแแแ แกแแญแแ แแ แกแแชแแแแ แแแ แกแแแแแกแแแแก, แ แแแแแ แแแแฃแแแกแฎแแแแแ pvs-แกแขแฃแแแ-แแแแแแแแขแแ แ แแแแคแ แแฎแแแแแก แแแแฎแแแ แแแแแก, แ แแ แแแชแแแแแแก แแแแ แแฌแฃแ แแแ. แแแแก แแแแแแแ แแกแแชแแแแแแแ, แจแแแแซแแแแ แแแฃแแแแแ แแก แแ แแจแ.
แแฃแ แแแแแก แคแแแแ แจแแแชแแแก แแแฃแแฃแจแแแแแแ แแแแแแแแแแก, แ แแแแแก แฌแแแแแฎแแ แจแแฃแซแแแแแแแ แแแแแแ แขแแชแแแก แแแ แแจแ, แแกแ แ แแ แแฅแแแ แฏแแ แฃแแแ แแแฎแแแแ แคแแแแ แแแแแฎแแแแแ. แแแแแ แแแแแแแขแแแแ แแฃแ แแแแแแ แแแแ-แแแแแแ แขแแ แแแ แแแแแแแแแแ แแ แแก html แคแแแแ.
แแ แแแแแแแแจแ แแ แแแแแแฌแงแแแขแ แแแแแ แแจแแแแก แแแแแแแแ แคแแกแขแแ แแ แซแแแแแแก แแแแแงแแแแแแ แคแแกแขแแก แแแแแแแแ.
แจแแแแแแ แแแแแฆแแ แจแแแแแแ แคแแแแ .แขแ แแแแก.แจ:
#/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;
แแฎแแ แแ แแ แแแแแแแขแแแแ แชแแแแแแแแแ git แกแแชแแแจแ, แ แแก แจแแแแแแแช Travis CI แแแขแแแแขแฃแ แแ แแแฃแจแแแแก build-แก. แแแแฌแแแแฃแแแ โppssppโ-แแ, แ แแแ แแแแแฎแแแแแ แแจแแแแแแแแแก แแแแแ แแจแแแแ:
แฉแแแ แแแแฎแแแ แแแแแแแแ แ แแแแกแขแ แฃแฅแชแแแก แแแแแฎแแแแแก:
แแฃ แแจแแแแแแแแ แฌแแ แแแขแแแแ แแแกแ แฃแแแ, แฉแแแ แแแแแฆแแแ แแ.แฌแแ แแแก แกแขแแขแแแฃแ แ แแแแแแแแก แจแแแแแแแแ. แ แ แแฅแแ แฃแแแ, แคแแกแขแแ แแแแแแแแ แแ แแ แแก แแแแแ แแจแแก แแแฆแแแแก แแ แแแแแ แแ แแแ. แแฅแแแ แจแแแแซแแแแ แแแ แฉแแแ แแแแฎแแ แชแแแแแแแก แแแแแกแแแแ แ แแแแแแ. แแแแ แแ แแแแจแแแแแแแแแแ แแแแฎแกแแแแแก, แ แแ แแจแแแแแแแแแก แแแกแ แฃแแแแแก แจแแแแแ, แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แคแแแแแแแ แฌแแแแแ แจแแฃแซแแแแแแ แแฅแแแแ.
แจแแชแแแแแก แจแแฏแแแแแ
แฉแแแ แฌแแ แแแขแแแแ แแแแแกแ แฃแแแ แฃแ แแฃแแแกแ แแแฌแแแ. แแฎแแ แแแแแ แแแแ แฌแแฃแแแแ, แ แแ แงแแแแ แฉแแแแ แซแแแแกแฎแแแแ แฆแแ แก. แแแแแ แแแแแแฎแแแแ แ แแแแแแแแ แกแแแแขแแ แแกแ แแฃแแฅแขแก แกแขแแขแแแฃแ แ แแแแแแแแก แแแฎแกแแแแแแแแ, แ แแแแแแช แฉแแแแแ แคแแกแขแแ แแแแแแ (แแก แแ แแงแ แขแงแฃแแแแ แ แแ แแแแฃแแแแ).
แกแแจแแจแ แแแขแแแแแแชแแ
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 แแแคแ แแฎแแแแแ:
แแแแแก แแก แแแฌแแแ แแแแแแ แแแแก แฃแกแแคแ แแฎแ แฐแแจแแแแแก แแแแฃแแจแ, แแฃแแชแ แจแแแชแแแก แฃแกแแคแ แแฎแแแแแก แกแแ แแแแฃแ แฎแแ แแแแก (
; Line 355
mov r8d, 20
xor edx, edx
lea rcx, QWORD PTR sum$[rsp]
call memset
; Line 356
แงแแแแแคแแ แ แ แแแแแ แแ แคแฃแแฅแชแแแช แแแแกแแขแ แจแแกแ แฃแแแแฃแแแ, แ แแแแช แแแแแแฌแแ แแแ แแแแจแแแแแแแแแ แแแแแชแแแแแ RAM-แจแ, แแฃแแชแ, แฏแแ แแ แแแแฎแแ แแ. แแแแแ แจแแแฎแแแแ แแแแแจแแแแแก แแแ แกแแแก แแกแแแแแแแก แฉแแแแแแแแแแก แแแขแแแแแแชแแแ:
; 354 :
; 355 : memset( sum, 0, sizeof( sum ) );
; 356 :}
แ แแแแ แช แฉแแแแแแแแแแแแแ แฉแแแก, แจแแแแแแแแแแ แฃแแฃแแแแแแงแ แแแ แ แแแแกแแขแ. แแก แแแแก แแแแ แฎแแแแ, แ แแ แคแฃแแฅแชแแแจแ แจแ 1 แแแ แแก แจแแแแแ แแแแกแแขแ แแฆแแ แแ แแก แแแแแแแแ แกแขแ แฃแฅแขแฃแ แแแ ctx. แแฅแแแแ แแแแแแแแแแ แ, แจแแแแแแแแแ แแ แฎแแแแแก แแแ แก แแ แแชแแกแแ แแก แแ แแแก แแแแแ แแแแก แแแฎแกแแแ แแแแก แแแแแฌแแ แแแ, แ แแแแแแช แแ แแฅแแแแ แแแแแงแแแแแฃแแ แแแแแแแแจแ. แแแแก แแแแแกแฌแแ แแแ แจแแแแซแแแแ แคแฃแแฅแชแแแก แแแแแงแแแแแแ RtlSecureZeroMemory แแ
แกแฌแแ แแ:
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 ) );
}
แแ แแกแแญแแ แ แจแแแแ แแแ
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 แแแคแ แแฎแแแแแ:
แแแ แแแ แ แแแจแ แงแฃแ แแแฆแแแ แแแแฅแชแแแ แกแฎแแ แคแแแแแแก if. แแแแ แจแแกแ แฃแแแแแ แแฎแแแแ แงแแแแ แแแ แแแแก แจแแแแฎแแแแแจแ leftvol > 0xFFFF || rightvol > 0xFFFF || แแแ แชแฎแแแ vol < 0 || แฃแคแแแแ vol < 0 แงแแแแ แแฆแแแฉแแแแแ. แแแ แแแแ, แฉแแแ แแแฆแแแ แจแแแแแ แแแแชแฎแแแแแแแก, แ แแแแแแแช แแแ แแแแ แแฅแแแแ แกแฎแแ แคแแแแแแแกแแแแก: แแแ แชแฎแแแ vol <= 0xFFFF, rightvol <= 0xFFFF, แแแ แชแฎแแแ แแแชแฃแแแแ >= 0 ะธ แฃแคแแแแแแแกแแแแแ >= 0. แงแฃแ แแแฆแแแ แแแแฅแชแแแ แแแแ แแ แแแแชแฎแแแแแแก. แแฅแแก แแฃ แแ แ แแแ แ แแแแก แจแแแแฌแแแแแก, แแฃ แ แ แแ แแก แแฃแชแแแแแแแ แแแ แแแ แแ แแแฌแแแแก แแแแแก แจแแกแแกแ แฃแแแแแแ?
แแกแ แ แแ, แฉแแแ แจแแแแแซแแแ แฃแกแแคแ แแฎแแ แฌแแแจแแแแ แแก แแแ แแแแแ แแแแชแฎแแแแแแแ:
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);
}
}
แแแแแ แแ แแ แกแชแแแแ แ. แแ แแแแแแขแ แแแ แแแแแแก แแแฆแแ แ แแฆแแช แจแแชแแแแ แแแแแแแ. แจแแกแแซแแแ, แแแ แแ แจแแแแแฌแแแก แ แ แแงแ แกแแญแแ แ.
Ctrl+C Ctrl+V แฃแแแกแฃแฎแแแก
static u32 scePsmfSetPsmf(u32 psmfStruct, u32 psmfData) {
if (!Memory::IsValidAddress(psmfData) ||
!Memory::IsValidAddress(psmfData)) {
return hleReportError(ME, SCE_KERNEL_ERROR_ILLEGAL_ADDRESS, "bad address");
}
....
}
แงแฃแ แแแฆแแแ แแแแฅแชแแแ แฉแแแก แจแแแแแ if. แแ แแแแแแแ แฃแชแแแฃแ แแ, แ แแ แแแแแฌแแแแ แแแกแแแแ แแ แกแฌแแ แแ? psmfData, แแ แฏแแ แแแขแ? แแกแ แ แแ, แแก แฉแแแแแแก แฃแชแแแฃแ แแ แแแฉแแแแแแ... แกแแแแแแแแแแจแ, แแก, แ แ แแฅแแ แฃแแแ, แจแแชแแแแแ แแ แแแแ แแงแ แแ แแแ แจแแงแแแแแก แแแ แแแแขแ แแก แจแแแแฌแแแแ.
แกแฌแแ แ แแแ แแแแขแ:
static u32 scePsmfSetPsmf(u32 psmfStruct, u32 psmfData) {
if (!Memory::IsValidAddress(psmfStruct) ||
!Memory::IsValidAddress(psmfData)) {
return hleReportError(ME, SCE_KERNEL_ERROR_ILLEGAL_ADDRESS, "bad address");
}
....
}
แแแแแฌแงแแแฃแแ แชแแแแแ
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 แแแคแ แแฎแแแแแ:
แแก แจแแชแแแแ แแแแแแ แแแแก แกแแฅแแฆแแแแแจแ ext, แแกแ แ แแ, แแแแแแแแแ แแ แแฎแแแ แแ แแแฅแขแก, แแแแ แแ แจแแชแแแแ แแแแแแก แแแแแ, แกแแแแ แแแแก แจแแแแแฉแแแแแ, แแแแขแแ แแแแแแฌแงแแแขแ แแแกแ แแแขแแแแแ. แงแแแแแแแ แแแแก แจแแแแแ, แแก แกแขแแขแแ แแ แแฎแแแ แจแแชแแแแแแแก แแแแฎแแแแแก, แแ แแแแ Travis CI-แกแแแ แแแขแแแ แแชแแแก แแ แแแแแแแแขแแ แแก แแแแคแแแฃแ แแชแแ แแ แแแแฎแแ แชแแแแแแฃแแ.
แชแแแแแแแแ แแแแ แแแแชแแแแแแแแฃแแแ แแฃแแแแแแ, แแฃแแชแ, แแก แกแแแ แแแ แแ แแแแแแงแแแแแ แแแแจแ, แแแแ แแขแแ แแแแ if, แ แแช, แ แ แแฅแแ แฃแแแ, แแซแแแแ แงแแแแ แแแ แแแแแแก แจแแแแฌแแแแแกแแก, แ แแแแแ, แ แแแแ แช แแแแฎแกแแแก, แแแแ แแฃแแแก แขแแแ. แจแแแแแแ แจแแแแฌแแแแแกแแช แแแ แ แแ แแฅแแก.
แ แแแแ แช แฉแแแก, แแแแแก แคแ แแแแแแขแแก แแแขแแ แก แแแแแแฌแงแแ แชแแแแแแก แแแแแฌแแ แ แแแแ แแแแแแแ.
แแแฉแแ แแแ
แกแฌแแ แแ แแฅ แแแแแกแ แฃแแแแ แแแแแ แจแแชแแแแแแแ. แแ แกแขแแขแแแก แแแแแแแ PVS-Studio-แก แแฃแจแแแแแก แแแแแแกแขแ แแ แแแ Travis CI-แกแแแ แแ แแแ แแ แแ แ แแ แแแฅแขแแก แ แแช แจแแแซแแแแ แกแแคแฃแซแแแแแแแ แแแแแแแแแแแ. แแฃ แแกแฃแ แ แฃแคแ แ แแแแ แแ แแแแแแ แจแแชแแแแแแ, แงแแแแแแแแก แจแแแแซแแแแ แแฆแคแ แแแแแแแแ แแแแแ
แแแกแแแแ
แแแ แกแแ แแแกแแแแก แแแแแงแแแแแ แแ แแแฅแขแแแแก แแกแแจแแแแแแแ, แแแแแขแแแแแ แแแแแแแแก แแ แแฅแขแแแแกแแแ แแ แแแ, แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแ แแ แแแแแ แแ แแแแแแ แแแแแก แจแแ แฌแงแแแกแแแแแแ. แแฃแแชแ, แแ แแ แแแแกแขแ แฃแฅแชแแ แจแแแซแแแแ แแ แแงแแก แกแแแแแ แแกแ, แแแแขแแ แขแแกแขแแ แแแแก แแแงแแแแแ แกแขแแขแแแฃแ แ แแแแแแแแแ แแ แแแ แแแแจแแแแแแแแแ แแแแฃแแฏแแแแกแแแก แแแแแก แฎแแ แแกแฎแก.
แกแแกแแ แแแแแ แแแฃแแแแ
PVS-Studio-แแก แแแจแแแแ Linux-แแ แแ macOS-แแ PVS-Studio-แก แแแจแแแแ Docker-แจแ Travis CI แแแแฃแแแแขแแชแแ
แแฃ แแกแฃแ แ แแแฃแแแแ แแ แแก แกแขแแขแแ แแแแแแกแฃแ แแแแแแ แแฃแแแขแแ แแแก, แแแฎแแแ, แแแแแแงแแแแ แแแ แแแแแแก แแแฃแแ: แแแฅแกแแ แแแแแแแแชแแแ.
แฌแงแแ แ: www.habr.com