ProHoster > Блог > Whakahaerenga > Me pehea te whirihora i te PVS-Studio i Travis CI ma te whakamahi i te tauira o te emulator papatohu takaro PSP
Me pehea te whirihora i te PVS-Studio i Travis CI ma te whakamahi i te tauira o te emulator papatohu takaro PSP
Ko Travis CI he ratonga tukutuku tohatoha mo te hanga me te whakamatautau i nga rorohiko e whakamahi ana i a GitHub hei manaaki waehere puna. I tua atu i nga ahuatanga whakahaere i runga ake nei, ka taea e koe te taapiri i a koe ake mihi ki nga whiringa whirihoranga whanui. I roto i tenei tuhinga ka whirihorahia e matou a Travis CI ki te mahi me te PVS-Studio ma te whakamahi i te tauira waehere PPSSPP.
Whakataki
Travis CI he ratonga tukutuku mo te hanga me te whakamatautau i nga rorohiko. I te nuinga o te wa ka whakamahia tahi me nga mahi whakauru tonu.
PPSSPP - Emulator papatohu kēmu PSP. Ka taea e te kaupapa te peehi i te whakarewatanga o nga keemu mai i nga whakaahua kopae mo Sony PSP. I tukuna te kaupapa i te 1 o Noema 2012. Kua raihanatia a PPSSPP i raro i te GPL v2. Ka taea e te tangata te whakapai ake waehere puna kaupapa.
PVS-Studio — he kaitirotiro waehere pateko mo te rapu hapa me nga whakaraeraetanga pea kei roto i te waehere papatono. I roto i tenei tuhinga, mo te whakarereketanga, ka whakarewahia e matou te PVS-Studio ehara i te rohe i runga i te miihini a te kaiwhakawhanake, engari i roto i te kapua, ka rapu i nga hapa i roto i te PPSSPP.
Te whakatu Travis CI
Ka hiahia matou ki tetahi putunga i runga i te GitHub, kei reira te kaupapa e hiahiatia ana e matou, me te matua mo te PVS-Studio (ka taea e koe te tiki kī whakamātautau ranei kore utu mo nga kaupapa Open Source).
Haere tatou ki te pae Travis CI. Whai muri i te whakamanatanga ma te whakamahi i to putea GitHub, ka kite matou i te rarangi o nga putunga:
Mo te whakamatautau, i mawehe ahau i te PPSSPP.
Ka whakahohehia e matou te putunga e hiahia ana matou ki te kohikohi:
I tenei wa, kaore e taea e Travis CI te hanga i to maatau kaupapa na te mea kaore he tohutohu mo te hanga. Na kua tae ki te wa mo te whirihoranga.
I te wa o te tātaritanga, ka whai hua etahi taurangi ki a tatou, hei tauira, te matua mo te PVS-Studio, kaore e pai ki te tautuhi i roto i te konae whirihoranga. Na me taapiri nga taurangi taiao ma te whakamahi i nga tautuhinga hanga i Travis CI:
Ka hiahia matou:
PVS_USERNAME - ingoa kaiwhakamahi
PVS_KEY - kī
MAIL_USER - he imeera ka whakamahia hei tuku i te ripoata
MAIL_PASSWORD - kupuhipa imeera
Ko nga mea whakamutunga e rua he mea whiriwhiri. Ka whakamahia enei ki te tuku hua ma te mēra. Mena kei te pirangi koe ki te tohatoha i te ripoata ma tetahi atu huarahi, kaore koe e tohu.
Na, kua taapirihia e matou nga taurangi taiao e hiahiatia ana e matou:
Inaianei me hanga he konae .travis.yml ka tuu ki te putake o te kaupapa. Kei a PPSSPP he konae whirihoranga mo Travis CI, heoi, he nui rawa atu, kaore e tika mo te tauira, no reira me tino whakangawari ake ka waiho ko nga mea timatanga anake.
Tuatahi, me tohu te reo, te putanga o Ubuntu Linux e hiahia ana matou ki te whakamahi i roto i te miihini mariko, me nga kohinga e tika ana mo te hanga:
Ko nga kohinga katoa kua whakarārangihia e hiahiatia ana mo te PPSSPP anake.
Inaianei ka tohuhia e matou te 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 iti ake mo te waahanga Tuhinga. I roto i te Travis CI, e rua nga huarahi ki te hanga i nga whiringa hanga: ko te tuatahi ko te tautuhi i te rarangi o nga kaitoi, nga momo punaha whakahaere, nga taurangi taiao, me etahi atu, i muri mai ka hangaia he matrix o nga huinga katoa ka taea; ko te tuarua he tino tohu mo te matrix. Ae ra, ka taea e koe te whakakotahi i enei huarahi e rua me te taapiri i tetahi keehi motuhake, engari, ka keri, ka whakakorehia ma te whakamahi i te waahanga whakakore. Ka taea e koe te panui atu mo tenei i roto i Nga tuhinga a Travis CI.
Ko nga mea e toe ana ko te whakarato i nga tohutohu huihuinga motuhake mo te kaupapa:
Ka taea e Travis CI te taapiri i a koe ake whakahau mo nga momo waahanga o te oranga o te miihini mariko. Wāhanga before_install ka mahia i mua i te whakaurunga o nga kete. Na tāuta, e whai ana i te whakaurunga o nga kete mai i te raarangi addons.apti tohuhia e matou i runga ake nei. Ko te huihuinga ake ka tu ki roto hōtuhi. Mena i pai nga mea katoa, katahi ka uru tatou ki roto muri_angitu (kei roto i tenei waahanga ka whakahaerehia e matou he tātaritanga pateko). Ehara enei i nga huarahi katoa ka taea te whakarereke, mena ka hiahia koe ki etahi atu, me titiro koe Nga tuhinga a Travis CI.
Mo te ngawari o te panui, i tukuna nga whakahau ki tetahi tuhinga motuhake .travis.sh, ka whakanohoia ki te pakiaka kaupapa.
Na kei a matou te konae e whai ake nei .travis.yml:
I mua i te whakauru i nga kohinga, ka whakahouhia e matou nga waahanga iti. Ka hiahiatia tenei hei hanga i te PPSSPP. Me taapiri te mahi tuatahi ki .travis.sh (tohua te toronga):
Inaianei kua tae tika mai matou ki te whakarite i te whakarewanga aunoa o PVS-Studio ki Travis CI. Tuatahi me whakauru tatou i te kete PVS-Studio ki te punaha:
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 te timatanga o te mahi travis_install ka whakaurua e matou nga kaitoi e hiahiatia ana ma te whakamahi i nga taurangi taiao. Na ki te te taurangi $PVS_ANALYZE toa uara Āe (i tohuhia e matou i te waahanga env i roto i te whirihoranga matrix), ka whakauruhia e matou te kete pvs-studio. I tua atu i tenei, ka tohua ano nga kohinga libio-tupapa-ssl-perl и libnet-ssleay-perl, heoi, e hiahiatia ana mo nga hua mēra, no reira kaore e tika mena kua whiriwhiria e koe tetahi atu tikanga mo te tuku i to ripoata.
mahi tango_tango ka tango me te wetewete i te puranga kua tohua:
Kua tae ki te wa ki te whakakotahi i te kaupapa. Ka tupu tenei i te waahanga hōtuhi:
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
}
Inaa, he whirihoranga taketake ngawari tenei, engari mo enei rarangi:
if [ "$PVS_ANALYZE" = "Yes" ]; then
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
fi
I tenei wahanga o te waehere i whakaritea e matou cmake haki mo te kaweake i nga whakahau whakahiato. He mea tika tenei mo te kaitirotiro waehere pateko. Ka taea e koe te panui atu mo tenei i roto i te tuhinga "Me pehea te whakahaere i te PVS-Studio i runga i te Linux me te macOS".
Mena i angitu te huihuinga, katahi ka tae atu muri_angitu, i reira ka mahia e matou he tātaritanga pateko:
Ko te rarangi tuatahi ka whakaputa i te konae raihana mai i te ingoa kaiwhakamahi me te taviri i tohua e matou i te timatanga i te wa e whakatuu ana i nga taurangi taiao Travis CI.
Ko te rarangi tuarua ka tiimata tika te tātari. Kara -j ka tautuhi i te maha o nga miro hei tātari, haki -l tohu raihana, haki -o ka tautuhi i te konae mo te whakaputa i nga raarangi, me te haki -disableLicenseExpirationCheck e hiahiatia ana mo nga putanga whakamatautau, mai i te taunoa pvs-studio-analyzer ka whakatupato i te kaiwhakamahi kua tata te mutunga o te raihana. Kia kore ai e puta, ka taea e koe te tohu i tenei haki.
Kei roto i te kōnae rangitaki te putanga mata e kore e taea te panui me te kore e tahuri, no reira me matua panui koe i te konae. Me tuku nga poroporo poro-tahuri, a ko te putanga he kōnae html.
I tenei tauira, i whakatau ahau ki te tuku purongo ma te mēra ma te whakamahi i te whakahau sendemail.
Ko te mutunga, ka whiwhi matou i te konae e whai ake nei .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;
Inaianei kua tae ki te wa ki te pana i nga huringa ki te putunga git, ka mutu ka whakahaere aunoa a Travis CI i te hanga. Paatohia te "ppsspp" ki te haere ki nga ripoata hanga:
Ka kite tatou i te tirohanga o te hanga o naianei:
Mena kua tutuki pai te hanga, ka whiwhi matou i te imeera me nga hua o te tātaritanga pateko. Ko te tikanga, ehara ko te mēra anake te huarahi ki te whiwhi purongo. Ka taea e koe te whiriwhiri i tetahi tikanga whakatinana. Engari he mea nui kia mahara ka oti te hanga, kaore e taea te uru atu ki nga konae miihini mariko.
Hapa whakarāpopototanga
Kua tutuki pai i a maatau te waahanga tino uaua. Inaianei kia mohio tatou kei te whai hua a tatou mahi katoa. Kia titiro tatou ki etahi mea whakamere mai i te purongo tātaritanga pateko i tae mai ki ahau ma te mēra (ehara i te mea mo te kore noa i tohu ahau).
Whakatupato PVS-Studio: V597 Ka taea e te kaitoha te whakakore i te waea mahi 'memset', e whakamahia ana ki te horoi i te 'tau' buffer. Me whakamahi te mahi RtlSecureZeroMemory() hei ūkui i nga raraunga tūmataiti. sha1.cpp 325
Ko tenei waahanga waehere kei roto i te waahanga hashing haumaru, heoi, kei roto he hapa haumarutanga nui (CWE-14). Kia titiro tatou ki te rarangi huihuinga i hangaia i te wa e whakahiato ana i te putanga Debug:
; Line 355
mov r8d, 20
xor edx, edx
lea rcx, QWORD PTR sum$[rsp]
call memset
; Line 356
Ko nga mea katoa kei te raupapa me te mahi whakamaumahara ka mahia, na reira ka tuhirua i nga raraunga nui i roto i te RAM, heoi, kaua e koa tonu. Me titiro ki te rarangi huihuinga o te putanga Tuku me te arotautanga:
Ka kitea mai i te raarangi, kaore i arohia e te kaitoi te piiraa whakamaumahara. Ko tenei na te mea i roto i te mahi sha1 i muri i te karanga whakamaumahara karekau he korero mo te hanganga CTX. Na reira, karekau e kitea e te kaikoipi he take mo te moumou i te wa tukatuka ki te tuhi i te mahara kaore e whakamahia a muri ake nei. Ka taea e koe te whakatika i tenei ma te whakamahi i te mahi RtlSecureZeroMemory ranei pera ki a 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);
}
}
Whakatupato PVS-Studio: V547 Ko te kupu 'leftvol >= 0' he pono tonu. sceAudio.cpp 120
Kia tupato ki tetahi atu peka mo te tuatahi if. Ka mahia te waehere mena he tikanga katoa taha maui > 0xFFFF || rightvol > 0xFFFF || taha maui < 0 || taha matau < 0 ka puta he teka. No reira, ka whiwhi tatou i nga korero e whai ake nei, ka tika mo tera atu peka: maui<= 0xFFFF, putunga matau <= 0xFFFF, taha maui >= 0 и Pukamatau >= 0. A hi‘o na i na parau hopea e piti. He mea tika ki te tirotiro he aha te tikanga e tika ana mo te mahia o tenei waahanga waehere?
Na ka taea e tatou te tango haumaru i enei korero here:
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);
}
}
Ko tetahi atu ahuatanga. He momo hapa kei te huna i muri i enei tikanga taapiri. Kaore pea ratou i tirotirohia nga mea e hiahiatia ana.
V501 He rite tonu nga kupu-iti '!Memory::IsValidAddress(psmfData)' ki te taha maui me te taha matau o te '||' kaiwhakahaere. scePsmf.cpp 703
Kia tupato ki te haki o roto if. Kare koe e whakaaro he mea ke ki te tirotirohia mena he tika te wahi noho? psmfRaraunga, e rua te nui? No reira he ahua ke tenei ki ahau... Inaa, he tika tenei, he patopato, ko te whakaaro ko te tirotiro i nga tawhā whakauru e rua.
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");
}
....
}
Whakatupato PVS-Studio: V547 He teka tonu te korero 'rahi == 8'. syn-att.c 195
Kei te kōpaki tēnei hapa ext, no reira kaore e tino whai paanga ki te kaupapa, engari i kitea te bug i mua i taku kitenga, na reira ka whakatau ahau ki te waiho. I muri i nga mea katoa, ehara tenei tuhinga mo te arotake i nga hapa, engari mo te whakauru ki a Travis CI, kaore he whirihoranga o te kaitirotiro i mahia.
Taurangi rahi ka arawhitihia e te taumau, heoi, kaore i te whakamahia i roto i te waehere, tae noa ki te kaiwhakahaere if, e, o te akoranga, homai teka i te wa e tirotirohia ana nga tikanga, na te mea, e mahara ana tatou, rahi rite ki te kore. Kare hoki he tikanga o nga arowhai o muri mai.
Ko te ahua, i wareware te kaituhi o te wahanga waehere ki te tuhirua i te taurangi rahi i mua i tera.
Kāti
I konei ka mutu pea me nga he. Ko te kaupapa o tenei tuhinga ko te whakaatu i nga mahi a PVS-Studio me Travis CI, kaua hoki ki te tātari i te kaupapa i te mea ka taea. Mena kei te hiahia koe ki nga hapa nui ake me te ataahua, ka taea e koe te mihi ki a raatau konei :).
mutunga
Ma te whakamahi i nga ratonga tukutuku ki te hanga kaupapa me te mahi tātaritanga taapiri ka taea e koe te kimi raru maha i muri tonu i te hanumi waehere. Heoi, kare pea i te rawaka te hanga kotahi, no reira ko te whakarite whakamatautau me te tātaritanga pateko ka tino pai ake te kounga o te waehere.