рдЯреНрд░реИрд╡рд┐рд╕ CI рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рддрд░рд┐рдд рд╡реЗрдм рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ GitHub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реНрдпрд╛рдкрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдкреАрдкреАрдПрд╕рдПрд╕рдкреАрдкреА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗред
рдкрд░рд┐рдЪрдп
рдЯреНрд░реИрд╡рд┐рд╕ CI рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдХреЗ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
PPSSPP - PSP рдЧреЗрдо рдХрдВрд╕реЛрд▓ рдПрдореБрд▓реЗрдЯрд░ред рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЛрдиреА PSP рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рдбрд┐рд╕реНрдХ рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдЧреЗрдо рдХреЗ рд▓реЙрдиреНрдЪ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо 1 рдирд╡рдВрдмрд░, 2012 рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред PPSSPP рдХреЛ GPL v2 рдХреЗ рддрд╣рдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реИред рдХреЛрдИ рднреА
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ
рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреЗрд╡рд▓рдкрд░ рдХреА рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкреАрдкреАрдПрд╕рдПрд╕рдкреАрдкреА рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗред
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рд╣рдореЗрдВ GitHub рдкрд░ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд╣рд╛рдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╣рдореЗрдВ рдЭреВрда рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА (рдЖрдк
рдУрдкрди рд╕реЛрд░реНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ
рдЯреНрд░рд╛рдпрд▓ рдХреБрдВрдЬреА рдпрд╛
рдореБрдлреНрдд рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдЯреНрд░реЗрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВред GitHub рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдЧреА:
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ PPSSPP рдХреЛ рдлреЛрд░реНрдХ рдХрд┐рдпрд╛ред
рд╣рдо рдЙрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
рдлрд┐рд▓рд╣рд╛рд▓, рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдордп рд╣реИред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди, рдХреБрдЫ рдЪрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреБрдВрдЬреА, рдЬреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реЛрдЧрд╛ред рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
- PVS_USERNAME - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо
- PVS_KEY - рдХреБрдВрдЬреА
- MAIL_USER - рд╡рд╣ рдИрдореЗрд▓ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- MAIL_PASSWORD - рдИрдореЗрд▓ рдкрд╛рд╕рд╡рд░реНрдб
рдЕрдВрддрд┐рдо рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЙрди рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдЕрдм рдПрдХ
.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'
рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдкреИрдХреЗрдЬ рдХреЗрд╡рд▓ PPSSPP рдХреЗ рд▓рд┐рдП рд╣реИрдВред
рдЕрдм рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
matrix: include: - os: linux compiler: "gcc" env: PPSSPP_BUILD_TYPE=Linux PVS_ANALYZE=Yes - os: linux compiler: "clang" env: PPSSPP_BUILD_TYPE=Linux
рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХред рдЯреНрд░реИрд╡рд┐рд╕ CI рдореЗрдВ, рдмрд┐рд▓реНрдб рдСрдкреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: рдкрд╣рд▓рд╛ рд╣реИ рдХрдореНрдкрд╛рдЗрд▓рд░, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рдХрд╛рд░, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдЖрджрд┐ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ; рджреВрд╕рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рд╣реИред рдмреЗрд╢рдХ, рдЖрдк рдЗрди рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЕрдиреВрдард╛ рдорд╛рдорд▓рд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ,
рдмрд╣рд┐рд╖реНрдХреГрдд рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ
рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВред
рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
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
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдЖрдкрдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдЬреАрд╡рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рдЯреАрдореЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓реЗ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдЕрдиреБрднрд╛рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░
рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ , рдЬреЛ
addons.apt рд╕реВрдЪреА рд╕реЗ рд╕рдВрдХреБрд▓ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдКрдкрд░ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рд╣реИред рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдПрдХ
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реА рд╣реЛрддреА рд╣реИред рдпрджрд┐ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛, рддреЛ рд╣рдо
after_success рдореЗрдВ
рдЖрддреЗ рд╣реИрдВ (рдпрд╣ рдЗрд╕ рдЦрдВрдб рдореЗрдВ рд╣реИ рдХрд┐ рд╣рдо рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд▓рд╛рдПрдВрдЧреЗ)ред рдпреЗ рд╕рднреА рдЪрд░рдг рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдЖрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ
.travis.sh рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕
.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.sh рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ (рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ):
travis_before_install() { git submodule update --init --recursive }
рдЕрдм рд╣рдо рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЖрдП рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
travis_install() { if [ "$CXX" = "g++" ]; then sudo apt-get install -qq g++-4.8 fi if [ "$PVS_ANALYZE" = "Yes" ]; then wget -q -O - https:
Travis_install рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ
, рд╣рдо
рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддрдм, рдпрджрд┐ рдЪрд░
$ PVS_ANALYZE рдорд╛рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ (рд╣рдордиреЗ рдЗрд╕реЗ рдЕрд╕реЗрдВрдмрд▓реА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди
env рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ), рд╣рдо
pvs-studio рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреИрдХреЗрдЬ
рд▓рд┐рдмрд┐рдпреЛ-рд╕реЙрдХреЗрдЯ-рдПрд╕рдПрд╕рдПрд▓-рдкрд░реНрд▓ рдФрд░
рд▓рд┐рдмрдиреЗрдЯ-рдПрд╕рдПрд▓рд╡рд╛рдИ-рдкрд░реНрд▓ рднреА рд╕рдВрдХреЗрдд рджрд┐рдП рдЧрдП рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЗрдВ рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдиреЗ рд░рд┐рдкреЛрд░реНрдЯ рд╡рд┐рддрд░рдг рдХрд╛ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХрд╛ рдЪреБрдирд╛ рд╣реИ рддреЛ рд╡реЗ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВред
Download_extract рдлрд╝рдВрдХреНрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рддрд╛ рд╣реИ:
download_extract() { aria2c -x 16 $1 -o $2 tar -xf $2 }
рдпрд╣ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдпрд╣
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:
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
рдХреЛрдб рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо
cmake рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдзреНрд╡рдЬ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓реЗрдЦ "
рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреИрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ" рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЕрд╕реЗрдВрдмрд▓реА рд╕рдлрд▓ рд░рд╣реА, рддреЛ рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ
after_success рдореЗрдВ
рдкрд╛рддреЗ рд╣реИрдВ , рдЬрд╣рд╛рдБ рд╣рдо рдПрдХ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ:
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 mail@domain.com \ -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
рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдХреБрдВрдЬреА рд╕реЗ рдПрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЯреНрд░реИрд╡рд┐рд╕ CI рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред
рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╕реАрдзреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░рддреА рд╣реИред
-J <N> рдзреНрд╡рдЬ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдзрд╛рд░рд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ,
-l <рдлрд╝рд╛рдЗрд▓> рдзреНрд╡рдЬ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ,
-o <рдлрд╝рд╛рдЗрд▓> рдзреНрд╡рдЬ рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░
-disableLicenseExpirationCheck рдзреНрд╡рдЬ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рдж рд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕реНрдЯреВрдбрд┐рдпреЛ-рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
рдХреЛ рдЪреЗрддрд╛рд╡рдиреА
рджреЗрдЧрд╛ ред рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдЪреНрдЪрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд┐рдирд╛ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдардиреАрдп рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо plog- рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧ рдХреЛ
рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ , рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ html рдлрд╝рд╛рдЗрд▓ рд╣реИред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ
рдкреНрд░реЗрд╖рдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрди
.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:
рдпрд╣ рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╕реНрд╡рддрдГ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд░рд┐рдкреЛрд░реНрдЯ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП "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 рдЪреЗрддрд╛рд╡рдиреА:
V597 рд╕рдВрдХрд▓рдХ 'рдореЗрдорд╕реЗрдЯ' рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ 'рдпреЛрдЧ' рдмрдлрд░ рдХреЛ рдлреНрд▓рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдЬреА рдбреЗрдЯрд╛ рдХреЛ рдорд┐рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП RtlSecureZeroMemory () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред sha1.cpp 325
рдпрд╣ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрд╢рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдореЗрдВ рдПрдХ рдЧрдВрднреАрд░ рд╕реБрд░рдХреНрд╖рд╛ рджреЛрд╖ (
CWE-14 ) рд╣реИред рдбреАрдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреЛрдбрд╛рдВрддрд░рдХ рд╕реВрдЪреА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
; Line 355 mov r8d, 20 xor edx, edx lea rcx, QWORD PTR sum$[rsp] call memset ; Line 356
рд╕рдм рдХреБрдЫ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд╣реИ, рдФрд░
рдореЗрдорд╕реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд░реИрдо рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рдУрд╡рд░рд░рд╛рдЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдм рддрдХ рдЖрдирдиреНрджрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдХреЛрдбрд╛рдВрддрд░рдХ рд╕реВрдЪреА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
; 354 : ; 355 : memset( sum, 0, sizeof( sum ) ); ; 356 :}
рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрдВрдкрд╛рдЗрд▓рд░ рдиреЗ
рдореЗрдорд╕реЗрдЯ рдХреЙрд▓ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐
sha1 рдлрд╝рдВрдХреНрд╢рди
рдореЗрдорд╕реЗрдЯ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
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;
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ
рдЪреЗрддрд╛рд╡рдиреА :
V547 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'рд▓реЗрдлреНрдЯрд╡реЛрд▓> = 0' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред sceAudio.cpp 120
рдкрд╣рд▓реЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдкрд░ рдзреНрдпрд╛рди
рджреЗрдВ ред рдХреЛрдб рдХреЛ рддрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╕рднреА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ
рд╡рд╛рдорд╛рд╡рд░реНрдд> 0xFFFF || rightvol> 0xFFFF || рд╡рд╛рдорд╡реЛрд▓ <реж || rightvol <0 рдЧрд▓рдд рдирд┐рдХрд▓реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдерди
рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрдВрдЧреЗ:
leftvol <= 0xFFFF ,
rightvol <= 0xFFFF ,
leftvol> = 0 рдФрд░
rightvol> = 0 ред рдЕрдВрддрд┐рдо рджреЛ рдХрдердиреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╢рд░реНрдд рд╣реИ?
рддреЛ рд╣рдо рд╢рд╛рдВрддрд┐ рд╕реЗ рдЗрди рд╕рд╢рд░реНрдд рдмрдпрд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
static u32 sceAudioOutputPannedBlocking (u32 chan, int leftvol, int rightvol, u32 samplePtr) { int result = 0;
рдПрдХ рдФрд░ рдкрд░рд┐рджреГрд╢реНрдпред рдЗрди рдирд┐рд░рд░реНрдердХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдкреАрдЫреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рд╣реИред рд╢рд╛рдпрдж рдЙрдиреНрд╣реЛрдВрдиреЗ рдЬрд╛рдБрдЪ рдХреА рдХрд┐ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
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"); } .... }
V501 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ! рдореЗрдореЛрд░реА :: IsValidAddress (psmfData) 'рдмрд╛рдИрдВ рдУрд░ рдФрд░ рджрд╛рдИрдВ рдУрд░' || рдСрдкрд░реЗрдЯрд░ред scePsmf.cpp 703
рдЕрдЧрд░ рдЕрдВрджрд░ рдЬрд╛рдБрдЪ рдкрд░ рдзреНрдпрд╛рди
рджреЗрдВ ред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрд╣ рдЕрдЬреАрдм рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдкрддрд╛
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"); } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ
рдЪреЗрддрд╛рд╡рдиреА :
V547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдЖрдХрд╛рд░ == 8' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реЛрддреА рд╣реИред syn-att.c 195
рдпрд╣ рддреНрд░реБрдЯрд┐
рдПрдХреНрд╕рдЯреНрд░реАрдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдлреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рдореБрдЭреЗ рджреЗрдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдорд┐рд▓реА рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдлрд┐рд░ рднреА, рдпрд╣ рд▓реЗрдЦ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдХреЛрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЪрд░
рдЖрдХрд╛рд░ рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЛрдб рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
рдЕрдЧрд░ рдпрд╣ рдХрдерди , рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп
рдЧрд▓рдд рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ,
рдЖрдХрд╛рд░ рд╢реВрдиреНрдп рд╣реИред рдмрд╛рдж рдХреЗ рдЪреЗрдХ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдХрд╛ рд▓реЗрдЦрдХ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЪрд░
рдЖрдХрд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ред
рдмрдВрдж рдХрд░реЛ
рдЗрд╕ рдкрд░, рд╢рд╛рдпрдж, рд╣рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдХрд╛рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдпрдерд╛рд╕рдВрднрд╡ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдЧрд▓рддрд┐рдпрд╛рдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛
рдпрд╣рд╛рдВ рдЙрдирдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ :)ред
рдирд┐рд╖реНрдХрд░реНрд╖
рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреЛрдб рд╡рд┐рд▓рдп рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдЪ рд╣реИ, рдПрдХ рдПрдХрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ред
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ

рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдореИрдХреНрд╕рд┐рдо рдЬрд╝рд┐рд╡рдЧрд┐рдВрдЯрд╕реЗрд╡ред
PSP рдЧреЗрдо рдХрдВрд╕реЛрд▓ рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░реИрд╡рд┐рд╕ CI рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ред