рдЦреЗрд▓ 0 рдИрд╕реНрд╡реА рдХреЗ рд▓реЗрдЦрдХ - рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдП рдЧрдП

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ 0 рдП.рдбреА.

0 AD рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░рдгрдиреАрддрд┐ рдХреА рд╢реИрд▓реА рдореЗрдВ рдПрдХ рддреНрд░рд┐-рдЖрдпрд╛рдореА рдЦреЗрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рдХреЗ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдб рдЖрдзрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░ рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ XNU рдХрд░реНрдиреЗрд▓ рдЬреИрд╕реА рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдмреНрд░реЗрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЗрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ C ++ рдореЗрдВ рдХреЛрдб рдХреА 165,000 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

0 рдИ


0 AD (0 A.D.) рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░рдгрдиреАрддрд┐ рдХреА рд╢реИрд▓реА рдореЗрдВ рдПрдХ рдирд┐: рд╢реБрд▓реНрдХ рддреНрд░рд┐-рдЖрдпрд╛рдореА рдЦреЗрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рдХреЗ рдПрдХ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдореБрдЦреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡рд╛рдЗрд▓реНрдбрдлреЗрдпрд░ рдЧреЗрдореНрд╕ рдЯреАрдо рдореЗрдВ рдПрдХрдЬреБрдЯ рд╣реИрдВ)ред рдЦреЗрд▓ рдЖрдкрдХреЛ 500 рдИрд╕рд╛ рдкреВрд░реНрд╡ рдХреА рдЕрд╡рдзрд┐ рдореЗрдВ рдореМрдЬреВрдж рд╕рднреНрдпрддрд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдИред - 1 рд╡рд░реНрд╖ рдИ.рдкреВ. рдИред 2018 рдХреА рдЧрд░реНрдорд┐рдпреЛрдВ рддрдХ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реИред [ рд╡рд┐рд╡рд░рдг рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ]ред

рдХреНрдпреЛрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 0 рдИрд╕реНрд╡реА?

рдореИрдВрдиреЗ Egor Bredikhin ( EgorBredikhin ) рдХреЗ рдПрдХ рд╕рд╣рдпреЛрдЧреА рдХреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдЫреЛрдЯреЗ рдЦреБрд▓реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдирдиреЗ рдФрд░ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореИрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ 0 рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЙрдЧ рднреЗрдЬрд╛ред рдкреНрд░рд╢реНрди: "рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреНрдпреЛрдВ?" - рдПрдХ рдЙрддреНрддрд░ рдерд╛: "рд╣рд╛рдВ, рдореИрдВрдиреЗ рдЕрднреА рдпрд╣ рдЦреЗрд▓ рдЦреЗрд▓рд╛ рд╣реИ, рдПрдХ рдЕрдЪреНрдЫреА рд░реАрдпрд▓-рдЯрд╛рдЗрдо рд░рдгрдиреАрддрд┐ред" рдареАрдХ рд╣реИ, рддреЛ рдпрд╣ 0 рдИрд╕реНрд╡реА :) рд╣реЛрдЧрд╛ред

рдШрдирддреНрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐


рдореИрдВ C ++ рдХреЛрдб рдХреА рдЕрдЪреНрдЫреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд▓рд┐рдП 0 AD рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдареАрдХ рд╣реИ, рдЖрдк рд╢рд╛рдпрдж рд╣реА рдХрднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЗрддрдиреЗ рдХрдо рдШрдирддреНрд╡ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдпреЗ рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд┐рдиреНрд╣реЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдпрджреНрдпрдкрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИрдВ, рдлрд┐рд░ рднреА, рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдШрдирддреНрд╡ рдФрд░ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛ред рдХреЛрдб рдХреА рдЧреИрд░-рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ 231270 рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ, 28.7% рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВред рдХреБрд▓ рдореЗрдВ, рд╢реБрджреНрдз C ++ рдХреЛрдб рдХреА 165,000 рд▓рд╛рдЗрдиреЗрдВред

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЫреЛрдЯреА рдереА, рдФрд░ рдЙрди рд╕рднреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ 19 рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд▓рд┐рдЦреАрдВред рдореИрдВ рдЗрди рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рд╢рд╛рдпрдж рдореИрдВ рдХреБрдЫ рдЪреВрдХ рдЧрдпрд╛, рддреНрд░реБрдЯрд┐ рдХреЛ рдПрдХ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдореИрд▓рд╛ рдХреЛрдб рдорд╛рдирддреЗ рд╣реБрдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рддрд╕реНрд╡реАрд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдХреЛрдб рдХреА 165,000 рд▓рд╛рдЗрдиреЛрдВ рдкрд░ 19 рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реАрдВред рд╣рдо рддреНрд░реБрдЯрд┐ рдШрдирддреНрд╡ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ: 19 * 1000/165000 = 0.115ред

рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рд░рд╛рдЙрдВрдб рдСрдл рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЧреЗрдо рдХреЛрдб рдореЗрдВ рдкреНрд░рддрд┐ 1000 рд▓рд╛рдЗрдиреЛрдВ рдХреА 0.1 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред

рдорд╣рд╛рди рдкрд░рд┐рдгрд╛рдо! рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рд╣рд╛рд▓ рдХреЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдЧрдгрдирд╛ рдХреА рдХрд┐ рдореБрдЭреЗ рдХреЛрдб рдХреА рдкреНрд░рддрд┐ 1000 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 0.25 рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реАрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдШрдирддреНрд╡ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╣реИ, рдореБрдЭреЗ рдкреВрд░реА рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рд╢рдХреНрддрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред

рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ EFL рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рд▓реЗрдВ, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдзреНрдпрд╛рди рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдФрд░ рджреЛрд╖реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХреАред рдЗрд╕рдореЗрдВ, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдХреА рдкреНрд░рддрд┐ 1000 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ 0.71 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, 0 рдИрд╕реНрд╡реА рдХреЗ рд▓реЗрдЦрдХ рдЕрдЪреНрдЫреЗ рдлреИрд▓реЛ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдб рдЙрдирдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛, рддреЗрдЬреА рд╕реЗ рдЗрд╕рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝рддреА рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐ рдШрдирддреНрд╡ рдЧреИрд░-рд░реИрдЦрд┐рдХ ( рдЕрдзрд┐рдХ ) рдмрдврд╝ рдЬрд╛рддреА рд╣реИред

рддреНрд░реБрдЯрд┐рдпреЛрдВ


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

рдиреЛрдЯред рд╣рдо рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдмреА 2 рдмреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╡рд┐рдХрд▓реНрдк рд╣реИ: " рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ "ред

рддреНрд░реБрдЯрд┐ N рез

рдЖрдЗрдП рдПрдХ рдЬрдЯрд┐рд▓ рддреНрд░реБрдЯрд┐ рдХреЛ рджреЗрдЦрдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреЛрдб рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

void WaterManager::CreateWaveMeshes() { .... int nbNeighb = 0; .... bool found = false; nbNeighb = 0; for (int p = 0; p < 8; ++p) { if (CoastalPointsSet.count(xx+around[p][0] + (yy + around[p][1])*SideSize)) { if (nbNeighb >= 2) { CoastalPointsSet.erase(xx + yy*SideSize); continue; } ++nbNeighb; // We've found a new point around us. // Move there xx = xx + around[p][0]; yy = yy + around[p][1]; indexx = xx + yy*SideSize; if (i == 0) Chain.push_back(CoastalPoint(indexx,CVector2D(xx*2,yy*2))); else Chain.push_front(CoastalPoint(indexx,CVector2D(xx*2,yy*2))); CoastalPointsSet.erase(xx + yy*SideSize); found = true; break; } } if (!found) endedChain = true; .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V547 CWE-570 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'nbNeighb> = 2' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИред рд╡рд╛рдЯрд░рдореИрдирдЧрд░ .рд╕реАрдкреАрд╕реА 581

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рдВрджреЗрд╢ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпреЛрдВ рд╣рд╛рд▓рдд nbNeighb> = 2 рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реИ? рджрд░рдЕрд╕рд▓, рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЪрд░ nbNeighb рдХреА рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИ !

рдиреАрдЪреЗ рджреЗрдЦреЗрдВ рдФрд░ рдЖрдк рдПрдХ рдмреНрд░реЗрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рджреЗрдЦреЗрдВрдЧреЗ рдЬреЛ рд▓реВрдк рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЪрд░ nbNeighb рдмрдврд╝рд╛ рд╣реИ, рддреЛ рдЪрдХреНрд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЪрд░ nbNeighb рдХрд╛ рдорд╛рди 1 рд╕реЗ рдЕрдзрд┐рдХ рдореВрд▓реНрдп рддрдХ рдХрднреА рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗрдЧрд╛ред

рдХреЛрдб рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реИред

рддреНрд░реБрдЯрд┐ N2

 void CmpRallyPointRenderer::MergeVisibilitySegments( std::deque<SVisibilitySegment>& segments) { .... segments.erase(segments.end()); .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V783 CWE-119 рдЕрд╡реИрдз itter 'рд╕реЗрдЧрдореЗрдВрдЯ рдХреА Dereferencing' () () рд╣реЛ рд╕рдХрддрд╛ рд╣реИред CCmpRallyPointRenderer.cpp 1290

рдмрд╣реБрдд, рдмрд╣реБрдд рдЕрдЬреАрдм рдХреЛрдбред рд╢рд╛рдпрдж рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 segments.erase(segments.end() - 1); 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рддрдм рдпрд╣ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛:

 segments.pop_back(); 

рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рддреНрд░реБрдЯрд┐ N3, N4

рдореИрдВрдиреЗ рджреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рдПрдХ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдВрд╕рд╛рдзрди рд░рд┐рд╕рд╛рд╡ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ WARN_RETURL рдореИрдХреНрд░реЛ рдХреНрдпрд╛ рд╣реИ ред

 #define WARN_RETURN(status)\ do\ {\ DEBUG_WARN_ERR(status);\ return status;\ }\ while(0) 

рддреЛ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, WARN_RETURN рдореИрдХреНрд░реЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╢рд░реАрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдЕрдм рдЗрд╕ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЧрд▓рдд рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред

рдкрд╣рд▓рд╛ рдЯреБрдХрдбрд╝рд╛ред

 Status sys_generate_random_bytes(u8* buf, size_t count) { FILE* f = fopen("/dev/urandom", "rb"); if (!f) WARN_RETURN(ERR::FAIL); while (count) { size_t numread = fread(buf, 1, count, f); if (numread == 0) WARN_RETURN(ERR::FAIL); buf += numread; count -= numread; } fclose(f); return INFO::OK; } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V773 CWE-401 рд╕рдорд╛рд░реЛрд╣ 'f' рд╣реИрдВрдбрд▓ рдЬрд╛рд░реА рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕рдВрд╕рд╛рдзрди рд░рд┐рд╕рд╛рд╡ рд╕рдВрднрд╡ рд╣реИред unix.cpp 332

рдпрджрд┐ рдлрд╝реНрд░реЗрдб рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛ рдХреЛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рддреЛ sys_generate_random_bytes рдлрд╝рдВрдХреНрд╢рди рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рд╢рд╛рдпрдж рд╣реА рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рд╣реИ рдХрд┐ рдЖрдк "/ рджреЗрд╡ / рдпреВрд░реЗрдирд┐рдпрдо" рд╕реЗ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдкрдврд╝ рдкрд╛рдПрдВрдЧреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдб рдореИрд▓рд╛ рд╣реИред

рджреВрд╕рд░рд╛ рдЯреБрдХрдбрд╝рд╛ред

 Status sys_cursor_create(....) { .... sys_cursor_impl* impl = new sys_cursor_impl; impl->image = image; impl->cursor = XcursorImageLoadCursor(wminfo.info.x11.display, image); if(impl->cursor == None) WARN_RETURN(ERR::FAIL); *cursor = static_cast<sys_cursor>(impl); return INFO::OK; } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V773 CWE-401 рд╕рдорд╛рд░реЛрд╣ 'рдирд┐рд╣рд┐рдд' рд╕реВрдЪрдХ рдЬрд╛рд░реА рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╕рдВрднрд╡ рд╣реИред x.cpp 421

рдпрджрд┐ рдХрд░реНрд╕рд░ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдореЗрдореЛрд░реА рд░рд┐рд╕рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐ N5

 Status LoadHeightmapImageOs(....) { .... shared_ptr<u8> fileData = shared_ptr<u8>(new u8[fileSize]); .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V554 CWE-762 рд╕рд╛рдЭрд╛_рдкреНрд░ рдХрд╛ рдЧрд▓рдд рдЙрдкрдпреЛрдЧред 'рдирдИ []' рдХреЗ рд╕рд╛рде рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдХреЛ 'рдбрд┐рд▓реАрдЯ' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред MapIO.cpp 54

рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк:

 shared_ptr<u8[]> fileData = shared_ptr<u8>(new u8[fileSize]); 

рддреНрд░реБрдЯрд┐ N6

 FUTrackedPtr(ObjectClass* _ptr = NULL) : ptr(_ptr) { if (ptr != NULL) FUTracker::TrackObject((FUTrackable*) ptr); ptr = ptr; } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V570 'ptr' рдЪрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред FUTracker.h 122

рддреНрд░реБрдЯрд┐ N7, N8
 std::wstring TraceEntry::EncodeAsText() const { const wchar_t action = (wchar_t)m_action; wchar_t buf[1000]; swprintf_s(buf, ARRAY_SIZE(buf), L"%#010f: %c \"%ls\" %lu\n", m_timestamp, action, m_pathname.string().c_str(), (unsigned long)m_size); return buf; } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V576 CWE-628 рдЧрд▓рдд рдкреНрд░рд╛рд░реВрдкред 'Swprintf_s' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╛рдВрдЪрд╡реЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рдЯреНрд░реЗрд╕рдХреИрдк 93

рдпрд╣рд╛рдБ рд╣рдо рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реА ++ рдореЗрдВ рд╕реНрд╡реИрд░реНрдлрд╝ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рднреНрд░рдорд┐рдд рдФрд░ рдЕрд╡рд┐рд╡реЗрдХреА рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ ред рдореИрдВ рдЗрд╕реЗ рд░рд┐рдЯреЗрд▓ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди V576 рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВ (рдЕрдиреБрднрд╛рдЧ "рд╡рд╛рдЗрдб рд▓рд╛рдЗрдиреНрд╕" рджреЗрдЦреЗрдВ)ред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдХреЛрдб рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реА ++ рдореЗрдВ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рдФрд░ рд▓рд┐рдирдХреНрд╕ рдпрд╛ рдореИрдХрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЗрд╕реА рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐: V576 CWE-628 рдЧрд▓рдд рдкреНрд░рд╛рд░реВрдкред 'Swprintf_s' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЪреМрдереЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред vfs_tree.cpp 211

рддреНрд░реБрдЯрд┐ N9, N10, N11

рдХреНрд▓рд╛рд╕рд┐рдХ ред рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред

 static void TEST_CAT2(char* dst, ....) { strcpy(dst, dst_val); // <= int ret = strcat_s(dst, max_dst_chars, src); TS_ASSERT_EQUALS(ret, expected_ret); if(dst != 0) // <= TS_ASSERT(!strcmp(dst, expected_dst)); } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V595 CWE-476 'dst' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд░реЗрдЦрд╛рдПрдБ: 140, 143. test_secure_crt.h 140

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреА рдЪреЗрддрд╛рд╡рдиреА:

  • V595 CWE-476 'dst' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд░реЗрдЦрд╛рдПрдБ: 150, 153. test_secure_crt.h 150
  • V595 CWE-476 'dst' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд░реЗрдЦрд╛рдПрдБ: 314, 317. test_secure_crt.h 314

рддреНрд░реБрдЯрд┐ N12

 typedef int tbool; void MikkTSpace::setTSpace(...., const tbool bIsOrientationPreserving, ....) { .... m_NewVertices.push_back(bIsOrientationPreserving > 0.5 ? 1.0f : (-1.0f)); .... } 

V674 CWE-682 'рдбрдмрд▓' рдкреНрд░рдХрд╛рд░ рдХреЗ '0.5' рд╢рд╛рдмреНрджрд┐рдХ рдХреА рддреБрд▓рдирд╛ 'int' рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред 'BIsOrientationPreserves> 0.5' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдорд┐рдХрдХрдЯреНрд╕рд╕реНрдкреЗрд╕рд╡рдХреНрд░реЙрдкред 137

рдпрд╣ 0.5 рдХреЗ рдПрдХ рдирд┐рд░рдВрддрд░ рдХреЗ рд╕рд╛рде int рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрд░реНрде рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдмреВрд▓рд┐рдпрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЪрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ 0.5 рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ bIsOrientationPreserves рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рдЕрдиреНрдп рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреНрд░реБрдЯрд┐ N13

 virtual Status ReplaceFile(const VfsPath& pathname, const shared_ptr<u8>& fileContents, size_t size) { ScopedLock s; VfsDirectory* directory; VfsFile* file; Status st; st = vfs_Lookup(pathname, &m_rootDirectory, directory, &file, VFS_LOOKUP_ADD|VFS_LOOKUP_CREATE); // There is no such file, create it. if (st == ERR::VFS_FILE_NOT_FOUND) { s.~ScopedLock(); return CreateFile(pathname, fileContents, size); } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V749 CWE-675 's' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рдирд╛рд╢рдХрд░реНрддрд╛ рджреВрд╕рд░реА рдмрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрдХреЛрдк рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдордВрдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред vfs.cpp 165

рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдПрдХ рд╡рд╕реНрддреБ ScopedLock "рдСрдмреНрдЬреЗрдХреНрдЯ" рдЕрдирд▓реЙрдХ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрд╕реАрдмрдд рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ s рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзреНрд╡рдВрд╕рдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╛рдиреА рд╡рд┐рдзреНрд╡рдВрд╕рдХ рджреЛ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВрдиреЗ рд╕реНрдХреЛрдкреЗрд▓реЙрдХ рд╡рд░реНрдЧ рдХреЗ рдЙрдкрдХрд░рдг рдХрд╛ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдХреНрд╕рд░, рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдРрд╕реА рджреЛрд╣рд░реА рдХреЙрд▓ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рдЕрдиреНрдп рдЕрдкреНрд░рд┐рдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдХреЛрдб рдЕрдм рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╕реНрдХреЛрдкреНрд▓реЙрдХ рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдХрд░ рд╕рдм рдХреБрдЫ рддреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

N14, N15, N16, N17 рддреНрд░реБрдЯрд┐

 CFsmEvent* CFsm::AddEvent( unsigned int eventType ) { .... pEvent = new CFsmEvent( eventType ); if ( !pEvent ) return NULL; .... } 

PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V668 CWE-570 'рдиреНрдпреВ' рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЕрд╢рдХреНрдд рдХреЗ рдЦрд┐рд▓рд╛рдл 'pEvent' рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХреЛрдИ рд╕рдордЭрджрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред fsm.cpp 259

рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЪреЗрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЕрдкрд╡рд╛рдж std :: bad_alloc рдлреЗрдВрдХрд╛ рдЬрд╛рдПрдЧрд╛ред

рддреЛ, рдЬрд╛рдБрдЪ рдмрд╣реБрдд рд╣реА рд╢рд╛рдирджрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рдЧрдВрднреАрд░ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИ рдЬрдм рдХреБрдЫ рддрд░реНрдХ рдХреЛ рдЗрдл рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 CFsmTransition* CFsm::AddTransition(....) { .... CFsmEvent* pEvent = AddEvent( eventType ); if ( !pEvent ) return NULL; // Create new transition CFsmTransition* pNewTransition = new CFsmTransition( state ); if ( !pNewTransition ) { delete pEvent; return NULL; } .... } 

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V668 CWE-570 'pNewTransition' рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдореГрддрд┐ рдХреЛ 'рдирдП' рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред fsm.cpp 289

рд╕реНрдореГрддрд┐ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдкрддрд╛ рдкрд╛рдЗрд╡реЗрдВрдЯ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реЛрдЧрд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдерд╛ рдФрд░ рд╢рд╛рдпрдж рдПрдХ рдЧрд▓рддреА рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рджреЛред рдЕрдм рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ AddEvent рдлрд╝рдВрдХреНрд╢рди рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 CFsmEvent* CFsm::AddEvent( unsigned int eventType ) { CFsmEvent* pEvent = NULL; // Lookup event by type EventMap::iterator it = m_Events.find( eventType ); if ( it != m_Events.end() ) { pEvent = it->second; } else { pEvent = new CFsmEvent( eventType ); if ( !pEvent ) return NULL; // Store new event into internal map m_Events[ eventType ] = pEvent; } return pEvent; } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рдирдП рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рдПрдХ рдирдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ m_Events рдХрдВрдЯреЗрдирд░ рд╕реЗ рдПрдХ рдореМрдЬреВрджрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддрд╛ рд╣реИред рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдирдИ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ, рд╡рд╣ рднреА m_Events рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рдФрд░ рдпрд╣рд╛рдВ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдХреМрди рдорд╛рд▓рд┐рдХ рд╣реИ рдФрд░ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреЗ рд╕рдВрдХреЗрдд m_Events рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ? рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣реИред рддрдм CFsm :: AddTransition рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЖрдо рддреМрд░ рдкрд░ рдЕрддрд┐рд╢реНрдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рд╣реИ ред

рдореБрдЭреЗ рдпрд╣ рдЖрднрд╛рд╕ рд╣реБрдЖ рдХрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 if ( !pNewTransition ) { delete pEvent; return NULL; } 

рдЕрдиреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдВ:

  • V668 CWE-571 рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл 'рд░рд┐рдЯ' рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдореГрддрд┐ рдХреЛ 'рдирдП' рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред TerrainTextureEntry.cpp 120
  • V668 CWE-571 рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл 'рдЙрддреНрддрд░' рд╕реВрдЪрдХ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдореГрддрд┐ рдХреЛ 'рдирдП' рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред SoundManager.cpp 542

рддреНрд░реБрдЯрд┐ N18, N19

 static void dir_scan_callback(struct de *de, void *data) { struct dir_scan_data *dsd = (struct dir_scan_data *) data; if (dsd->entries == NULL || dsd->num_entries >= dsd->arr_size) { dsd->arr_size *= 2; dsd->entries = (struct de *) realloc(dsd->entries, dsd->arr_size * sizeof(dsd->entries[0])); } if (dsd->entries == NULL) { // TODO(lsm): propagate an error to the caller dsd->num_entries = 0; } else { dsd->entries[dsd->num_entries].file_name = mg_strdup(de->file_name); dsd->entries[dsd->num_entries].st = de->st; dsd->entries[dsd->num_entries].conn = de->conn; dsd->num_entries++; } } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V701 CWE-401 realloc () рд╕рдВрднрд╛рд╡рд┐рдд рд░рд┐рд╕рд╛рд╡: рдЬрдм realloc () рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдореВрд▓ рд╕реВрдЪрдХ 'dsd-> рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ' рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдкреЙрдЗрдВрдЯрд░ рдХреЛ realloc () рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред mongoose.cpp 2462

рдпрджрд┐ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЗрдореЛрд░реА рдХреЛ рд░рд┐рдпрд▓реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдирдП рдорд╛рди рдХреЗ рд╕рд╛рде рдореВрд▓ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдорд╛рди рддреБрд░рдВрдд рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рд╕реНрдореГрддрд┐ рдЖрдмрдВрдЯрди рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ realloc рдлрд╝рдВрдХреНрд╢рди NULL рд▓реМрдЯреЗрдЧрд╛, рдФрд░ рдпрд╣ NULL dsd-> рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдЪрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдХреЛ рдореБрдХреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдкрддрд╛ рдкрд╣рд▓реЗ dsd-> рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реЛрдЧрд╛ред

рдПрдХ рдФрд░ рдЧрд▓рддреА: V701 CWE-401 realloc () рд╕рдВрднрд╡ рд░рд┐рд╕рд╛рд╡: рдЬрдм realloc () рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдореВрд▓ рд╕реВрдЪрдХ 'рдмрдлрд░' рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдкреЙрдЗрдВрдЯрд░ рдХреЛ realloc () рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред Preprocessor.cpp 84

рдирд┐рд╖реНрдХрд░реНрд╖


рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдЗрд╕ рдмрд╛рд░ рд▓реЗрдЦ рдЖрдХрд░реНрд╖рдХ рдирд┐рдХрд▓рд╛, рдпрд╛ рдХрд┐ рдореИрдВ рдмрд╣реБрдд рд╕реА рднрдпрд╛рдирдХ рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЬреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдлрд┐рд░ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ ред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП, рдореИрдВ Instagram @pvs_studio_unicorn рдФрд░ Twitter @Code_Analysis рдкрд░ рдореЗрд░реЗ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рдирд┐рдордВрддреНрд░рдг рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛ ред



рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдПрдВрдбреНрд░реЗ рдХрд╛рд░рдкреЛрд╡ред рдЕрдЪреНрдЫреА рдиреМрдХрд░реА, рдЦреЗрд▓ 0 рдИрд╕реНрд╡реА рдХреЗ рд▓реЗрдЦрдХ!

Source: https://habr.com/ru/post/hi420267/


All Articles