ProHoster > Pūnaewele > Nā Administration > 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:
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:
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:
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:
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:
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ʻī:
ʻ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.
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):
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:
ʻ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:
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:
E ʻike mākou i kahi hiʻohiʻona o ka hale o kēia manawa:
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).
ʻŌ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:
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.
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.
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.
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.