
рд╣рдо рд╡рд┐рджреЗрд╢реА рдХреЗ рд╕рднреА рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдЧрд▓рддрд┐рдпрд╛рдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЬ рдЯреЗрд╕реНрдЯ рдмреЗрдВрдЪ рдкрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛рдлреА рджреБрд░реНрд▓рдн рдЕрддрд┐рдерд┐ рд╣реИ - рд╕реА # рдореЗрдВ рдПрдХ рдЧреЗрдоред рдЕрд░реНрдерд╛рддреН, рдУрд╕реБ! рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣: рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ, рд╕реЛрдЪреЗрдВ, рдЦреЗрд▓реЗрдВред
рдЦреЗрд▓
Osu! - рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╕рдВрдЧреАрдд рддрд╛рд▓ рдЦреЗрд▓ред
рдЦреЗрд▓ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 15 рдорд┐рд▓рд┐рдпрди рд╕реЗ рдЕрдзрд┐рдХ рдкрдВрдЬреАрдХреГрдд рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХрд╛ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореБрдлреНрдд рдЧреЗрдордкреНрд▓реЗ, рд░рдВрдЧреАрди рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рдСрдирд▓рд╛рдЗрди рд░реИрдВрдХрд┐рдВрдЧ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ, рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдХреА рдореМрдЬреВрджрдЧреА, рд╕рдВрдЧреАрдд рд░рдЪрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ рдЖрджрд┐ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдореИрдВ рдЧреЗрдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЬреЛ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рд╡реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд▓реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдБ ред
рдореБрдЭреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд╣реИ, рдЬреЛ
GitHub рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз
рд╣реИ ред рднрдВрдбрд╛рд░ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдЦреНрдпрд╛ (24 рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ) рддреБрд░рдВрдд рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдЬ рднреА рдЬрд╛рд░реА рд╣реИ (рдЦреЗрд▓ 2007 рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрд╛рдо рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдЗрд╕реА рд╕рдордп, рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрд░реЛрдд рдХреЛрдб рдирд╣реАрдВ рд╣реИ - 1813 .cs рдлрд╛рдЗрд▓реЗрдВ рдЬрд┐рд╕рдореЗрдВ 135 рд╣рдЬрд╛рд░ рдХреЛрдб рдХреА рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрддреА рд╣реИрдВ, рдЦрд╛рд▓реА рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдЗрд╕ рдХреЛрдб рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЪреЗрдХ рдореЗрдВ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реВрдВред рдкрд░реАрдХреНрд╖рдг рдХреЛрдб 306 .cs рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рд░рд┐рдХреНрдд рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреЛрдб рдХреА 25 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВред рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ: рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕реА # рдХреЛрд░ рдореЗрдВ рд▓рдЧрднрдЧ 300 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдХреБрд▓ рдореЗрдВ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ 1507 рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ 110 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рд╡рд╛рд▓реА рдЧреИрд░-рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░рд┐рдгрд╛рдо рдиреЗ рдореБрдЭреЗ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕рдиреНрди рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдиреЗ рдореЗрдВ рдЬрд▓реНрджрдмрд╛рдЬреА рдХрд░рддрд╛ рд╣реВрдВред
рддреНрд░реБрдЯрд┐рдпреЛрдВ
V3001 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'рдкрд░рд┐рдгрд╛рдо == HitResult.Perfect' рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ '' рдСрдкрд░реЗрдЯрд░ред рдбреНрд░рд╛рдПрдмрд▓рд╣реЛрд▓реНрдбрдиреЛрдЯред 266
protected override void CheckForResult(....) { .... ApplyResult(r => { if (holdNote.hasBroken && (result == HitResult.Perfect || result == HitResult.Perfect)) result = HitResult.Good; .... }); }
рдХреЙрдкреА-рдкреЗрд╕реНрдЯ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдгред рдПрдХ рдХреЙрдорд┐рдХ рд╢рдмреНрдж рдЬрд┐рд╕реЗ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рд╡рд╛рд▓реЗрд░реА рдХреЛрдорд╛рд░реЛрд╡ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдиреЗ рд▓реЗрдЦ "
2019 рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╢реАрд░реНрд╖ 10 рддреНрд░реБрдЯрд┐рдпрд╛рдВ " рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ (рдкреЗрд╢ рдХрд┐рдпрд╛)ред
рддреЛ, рджреЛ рд╕рдорд╛рди рдЬрд╛рдВрдЪ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рдЪреЗрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдФрд░
HitResult рд╕рдВрд▓рдпрди рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
public enum HitResult { None, Miss, Meh, Ok, Good, Great, Perfect, }
рдХрд┐рд╕ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рджреВрд╕рд░реЗ рдЪреЗрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ? рдкреНрд░рд╢реНрди рдЬреЛ рдХреЗрд╡рд▓ рдбреЗрд╡рд▓рдкрд░ рд╣реА рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рддреНрд░реБрдЯрд┐ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рддрд░реНрдХ рдХреЛ рд╡рд┐рдХреГрдд рдХрд░рддреА рд╣реИред
V3001 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'рдкрд░рд┐рд╡рд╛рд░! = GetFamilyString (TournamentTypeface.Aquatico)' рдмрд╛рдИрдВ рдУрд░ рдФрд░ '&&' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ред рдЯреВрд░реНрдирд╛рдореЗрдВрдЯрдлреЛрдВрдЯ.рдХреЗ 64
public static string GetWeightString(string family, FontWeight weight) { .... if (weight == FontWeight.Regular && family != GetFamilyString(TournamentTypeface.Aquatico) && family != GetFamilyString(TournamentTypeface.Aquatico)) weightString = string.Empty; .... }
рдФрд░ рдлрд┐рд░ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░реЗрдВред рдореИрдВрдиреЗ рдХреЛрдб рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдЖрд╕рд╛рдиреА рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдкреВрд░реА рд╕реНрдерд┐рддрд┐ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдереАред рдпрд╣ рднреА рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреЛрдб рдХреИрд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдкреНрд░рдЪрд╛рд░ рдореЗрдВ рдПрдХ рдПрдХрд▓ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИ:
public enum TournamentTypeface { Aquatico }
рд╣рд╛рд▓рдд рдиреЗ
рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдЪрд░ рдХреЛ рдЧрд▓рддреА рд╕реЗ рджреЛ рдмрд╛рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред
V3009 [CWE-393] рдпрд╣ рд╡рд┐рдЪрд┐рддреНрд░ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ 'рд╕рдорд╛рди' рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред KeyCounterAction.cs 19
public bool OnPressed(T action, bool forwards) { if (!EqualityComparer<T>.Default.Equals(action, Action)) return false; IsLit = true; if (forwards) Increment(); return false; }
рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛
рдЭреВрдареА рдЖрдПрдЧреАред рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдХреНрд╕рд░ рд░рд┐рдЯрд░реНрди рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ (рдмрджрд╕реВрд░рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдХреЛ рдЫреЛрдбрд╝рдХрд░)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рднрд░ рдореЗрдВ рдЖрдпрд╛:
public bool OnPressed(T action) => Target.Children .OfType<KeyCounterAction<T>>() .Any(c => c.OnPressed(action, Clock.Rate >= 0));
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
OnPressed рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдкрд░рд┐рдгрд╛рдо рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛
рдЭреВрдард╛ рд╣реЛрддрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП
OnPressed рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рднреА рд╣рдореЗрд╢рд╛
рдЭреВрдард╛ рд╣реЛрдЧрд╛ ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рдХреА рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
рдЗрд╕реА рддрд░рд╣ рдХреА рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐:
- V3009 [CWE-393] рдпрд╣ рд╡рд┐рдЪрд┐рддреНрд░ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ 'рд╕рдорд╛рди' рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред KeyCounterAction.cs 30
V3042 [CWE-476] рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 'val.NewValue' рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред 41
public TournamentTeam() { Acronym.ValueChanged += val => { if (....) FlagName.Value = val.NewValue.Length >= 2
рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ
?: рдСрдкрд░реЗрдЯрд░, рд╡реИрд░рд┐рдПрдмрд▓
рд╡реИрд▓реН.рдиреНрдпреВрд╡реИрд▓реНрдпреВ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ, рддрдм рд╕реЗ рддрддреНрдХрд╛рд▓реАрди-рд╢рд╛рдЦрд╛ рдореЗрдВ, рд╕рд╢рд░реНрдд рдПрдХреНрд╕реЗрд╕
рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ val.NewValue? рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
ред Substring (....) ред
рдЗрд╕реА рддрд░рд╣ рдХреА рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐:
- V3042 [CWE-476] рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 'val.NewValue' рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред 48
V3042 [CWE-476] рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 'рдПрдкреАрдЖрдИ' рдСрдмреНрдЬреЗрдХреНрдЯ SetupScreen.cs 77 рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
private void reload() { .... new ActionableInfo { Label = "Current User", ButtonText = "Change Login", Action = () => { api.Logout();
рдпрд╣ рдХреЛрдб рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдЕрднреА рднреА рд╣реИред
ActionableInfo рдкреНрд░рдХрд╛рд░ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред
рдПрдХреНрд╢рди рдлрд╝реАрд▓реНрдб рдХреЛ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд╕рд╛рде рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн
рдПрдкреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд╛рдирд╛, рддрдм рд╕реЗ, рдЬрдм
рдорд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реБрдП,
рдПрдкреАрдЖрдИ рдЪрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рд▓рдВрдмреЛрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░, рд╢рд╛рдпрдж, рдбреЗрд╡рд▓рдкрд░ рдХрд┐рд╕реА рддрд░рд╣
рдПрдкреАрдЖрдИ рд▓рд┐рдВрдХ рдХреЗ рдЧреИрд░-рд╢реВрдиреНрдп рдореВрд▓реНрдп рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рд░рдгрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓реИрдореНрдмреНрдбрд╛ рдмреЙрдбреА рдореЗрдВ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рдо рдХреЗ рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИрдВ (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рдВрдЪ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред
V3066 [CWE-683] 'Atan2' рд╡рд┐рдзрд┐: 'diff.X' рдФрд░ 'diff.Y' рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рдХреНрд░рдоред SliderBall.cs 182
public void UpdateProgress(double completionProgress) { .... Rotation = -90 + (float)(-Math.Atan2(diff.X, diff.Y) * 180 / Math.PI); .... }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐
рдЧрдгрд┐рдд рд╡рд░реНрдЧ рдХреЗ
рдЕрддрди 2 рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдбреЗрд╡рд▓рдкрд░ рдиреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдорд┐рд▓рд╛рдпрд╛ред
рдЕрддрди реи рд╡рд┐рдЬреНрдЮрд╛рдкрди :
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореВрд▓реНрдпреЛрдВ рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИ, рддреЛ рдореИрдВ рдпрд╣ рдирд╣реАрдВ
рдЖрдВрдХ рд╕рдХрддрд╛ рдХрд┐ рдЪреВрдВрдХрд┐
рдЕрдкрдбреЗрдЯрдкреНрд░реЛрдЧреНрд░реЗрдб рдкрджреНрдзрддрд┐ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЧрдгрдирд╛рдПрдВ рд╣реИрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдХреЛрдб рдореЗрдВ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рддрдереНрдп рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВред
V3080 [CWE-476] рд╕рдВрднрд╛рд╡рд┐рдд
рдЕрд╢рд╛рдВрддрд┐ ред 'рдмреАрдЯрдореИрдк' рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╡рд░реНрдХрдмреАрдЯрдореИрдк .cs 57
protected virtual Track GetVirtualTrack() { .... var lastObject = Beatmap.HitObjects.LastOrDefault(); .... }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ
рдмреАрдЯрдордо рдирд▓ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рдХреЗ рдЦрддрд░реЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ:
public IBeatmap Beatmap { get { try { return LoadBeatmapAsync().Result; } catch (TaskCanceledException) { return null; } } }
рдареАрдХ рд╣реИ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рд╣реА рд╣реИред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рд╕рдорд╛рди рд╡рд┐рд╖рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реА # 8.0 рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛), рд▓реЗрдЦ "
рд╕реА # 8.0 рдФрд░ рд╕реНрдЯреЗрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ " рджреЗрдЦреЗрдВред
V3083 [CWE-367] 'рдСрдмреНрдЬреЗрдХреНрдЯрдХреЙрдирд╡рд░реНрдЯреЗрдб' рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЗрдирд╡реЙрдЗрд╕, NullReferenceException рд╕рдВрднрд╡ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдШрдЯрдирд╛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдмреАрдЯрдореИрдкрдХреЙрд░реНрдЯрд░
private List<T> convertHitObjects(....) { .... if (ObjectConverted != null) { converted = converted.ToList(); ObjectConverted.Invoke(obj, converted); } .... }
рдЧреИрд░-рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреАред
рдЕрд╢рдХреНрдд рдФрд░ рдЗрд╕рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ, рд╡реЗ рдШрдЯрдирд╛ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдлрд┐рдХреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ:
private List<T> convertHitObjects(....) { .... converted = converted.ToList(); ObjectConverted?.Invoke(obj, converted); .... }
V3095 [CWE-476] рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдХреЙрд▓рдо' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 141, 142. рд╕реНрдХреНрд╡рд╛рдпрд░рдЧреНрд░рд╛рдл.рдХреИрдВрд╕ 141
private void redrawProgress() { for (int i = 0; i < ColumnCount; i++) columns[i].State = i <= progress ? ColumnState.Lit : ColumnState.Dimmed; columns?.ForceRedraw(); }
рдпрд╣ рдПрдХ рд▓реВрдк рдореЗрдВ
рдХреЙрд▓рдо рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЙрд╕реА рд╕рдордп, рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐
рдХреЙрд▓рдо рд▓рд┐рдВрдХ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдж рдореЗрдВ рдХреЛрдб рдореЗрдВ, рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╢рд░реНрдд рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
V3119 рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдШрдЯрдирд╛ 'OnNewResult' рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдИрд╡реЗрдВрдЯ рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдпрд╛ 'рд╕реАрд▓' рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред DrawableRuleset.cs 256
private void addHitObject(TObject hitObject) { .... drawableObject.OnNewResult += (_, r) => OnNewResult?.Invoke(r); .... } public override event Action<JudgementResult> OnNewResult;
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЦрддрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЦрддрд░рд╛ рд╣реИ - рдореИрдВ рдирд┐рджрд╛рди рдХреЗ рд▓рд┐рдП
рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкрдврд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╕рдордп рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдерд╛, "
C # рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдИрд╡реЗрдВрдЯ: рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ ред"
рдХреЛрдб рдореЗрдВ рдПрдХ рдФрд░ рд╕рдорд╛рди рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдирд┐рд░реНрдорд╛рдг:
- V3119 рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рдШрдЯрдирд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдИрд╡реЗрдВрдЯ рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдпрд╛ 'рд╕реАрд▓' рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдбреНрд░рд╛рдПрдмрд▓рд░реБрд▓реНрд╕реЗрдЯред 257
V3123 [CWE-783] рд╢рд╛рдпрдж '??' рдСрдкрд░реЗрдЯрд░ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЗрд╕рдХреЗ рдмрд╛рдПрдВ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реЗ рдХрдо рд╣реИред OsuScreenStack.cs 45
private void onScreenChange(IScreen prev, IScreen next) { parallaxContainer.ParallaxAmount = ParallaxContainer.DEFAULT_PARALLAX_AMOUNT * ((IOsuScreen)next)?.BackgroundParallaxAmount ?? 1.0f; }
рд╕рдорд╕реНрдпрд╛ рдХреА рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП - рдореИрдВ рдПрдХ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдХрд┐ рдХреЛрдб рдЕрдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:
x = (c * a) ?? b;
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдереА рдХрд┐ * рдСрдкрд░реЗрдЯрд░ рдХреЗ рдкрд╛рд╕ рдСрдкрд░реЗрдЯрд░ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред рдХреЛрдб рдХрд╛ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг (рдХреЛрд╖реНрдардХ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛):
private void onScreenChange(IScreen prev, IScreen next) { parallaxContainer.ParallaxAmount = ParallaxContainer.DEFAULT_PARALLAX_AMOUNT * (((IOsuScreen)next)?.BackgroundParallaxAmount ?? 1.0f); }
рдХреЛрдб рдореЗрдВ рдПрдХ рдФрд░ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐:
V3123 [CWE-783] рд╢рд╛рдпрдж '??' рдСрдкрд░реЗрдЯрд░ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЗрд╕рдХреЗ рдмрд╛рдПрдВ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реЗ рдХрдо рд╣реИред FramedReplayInputHandler.cs 103
private bool inImportantSection { get { .... return IsImportant(frame) && Math.Abs(CurrentTime - NextFrame?.Time ?? 0) <= AllowedImportantTimeSpan; } }
рдпрд╣рд╛рдВ, рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм
Math.bs рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрддреНрддреАрд░реНрдг рдХреА рдЧрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
(a тАУ b) ?? 0
рд╕рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб:
private bool inImportantSection { get { .... return IsImportant(frame) && Math.Abs(CurrentTime тАУ (NextFrame?.Time ?? 0)) <= AllowedImportantTimeSpan; } }
V3142 [CWE-561]
рдЕрдЧрдореНрдп рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛред рдбреНрд░рд╛рдмрд▓рд╣реЛрд▓реНрдбрдиреЛрдЯреНрд╕.рдХреЗ 214
public override bool OnPressed(ManiaAction action) { if (!base.OnPressed(action)) return false; if (Result.Type == HitResult.Miss)
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐
OnPressed рд╣реИрдВрдбрд▓рд░
рдХреЛрдб ,
рдпрджрд┐ рджреВрд╕рд░рд╛
рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдпрд╣ рдЗрд╕ рдзрд╛рд░рдгрд╛ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рд╢рд░реНрдд рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛрддреА рд╣реИ, рдпрд╛рдиреА
рдЖрдзрд╛рд░ред рдХреЛрдИ рднреА рддрд░реАрдХрд╛ рд╣рдореЗрд╢рд╛
рдЧрд▓рдд рд╣реЛрдЧрд╛ ред
рдЖрдзрд╛рд░ рдкрд░
рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
public virtual bool OnPressed(ManiaAction action) { if (action != Action.Value) return false; return UpdateResult(true); }
рд╣рдо
UpdateResult рд╡рд┐рдзрд┐ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ:
protected bool UpdateResult(bool userTriggered) { if (Time.Elapsed < 0) return false; if (Judged) return false; .... return Judged; }
рдиреЛрдЯ рдХрд░реЗрдВ рдХрд┐
рдЬрдЬ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
UpdateResult рдкрджреНрдзрддрд┐ рдХрд╛ рддрд░реНрдХ рдпрд╣
рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо
рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:
return false;
рдЗрд╕ рдкреНрд░рдХрд╛рд░,
UpdateResult рдкрджреНрдзрддрд┐ рд╣рдореЗрд╢рд╛
рдЭреВрдареА рд╡рд╛рдкрд╕ рдЖ
рдЬрд╛рдПрдЧреА , рдЬреЛ рд╕реНрдЯреИрдХ рдХреЗ рдКрдкрд░ рдХреЛрдб рдореЗрдВ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдХреЛрдб рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг
рдмрдиреЗрдЧреА ред
V3146 [CWE-476] 'рдирд┐рдпрдо' рдХреА рд╕рдВрднрд╛рд╡рд┐рдд
рдЕрд╢рд╛рдВрддрд┐ ред 'FirstOrDefault' рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрд╢рдХреНрдд рдорд╛рди рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИред APILegacyScoreInfo.cs 24
public ScoreInfo CreateScoreInfo(RulesetStore rulesets) { var ruleset = rulesets.GetRuleset(OnlineRulesetID); var mods = Mods != null ? ruleset.CreateInstance()
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ
рдирд┐рдпрдореЛрдВ рдХреЛ рдорд╛рдирддрд╛ рд╣реИред
CreateInstance () рдХреЙрд▓ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
GetRuleset рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд╣рд▓реЗ рд╡рд╛рд▓рд╛
рдирд┐рдпрдо рдЪрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:
public RulesetInfo GetRuleset(int id) => AvailableRulesets.FirstOrDefault(....);
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рдЙрдЪрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ
FirstOrDefault рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ
рдЕрд╢рдХреНрдд рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЧреЗрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ "рдУрд╕реБ!" рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдкреНрд░рд╕рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдореИрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реБрдЭрд╛рдП рдЧрдП рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдФрд░ рдЦреЗрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦреЗрдВред
рдФрд░ рдЬреЛ рд▓реЛрдЧ рдХреЛрдб рдореЗрдВ рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ, рдЬреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдПрдХ рдЕрдЪреНрдЫреА рдорджрдж рд╣реЛрдЧреАред рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдмрд╛рд░ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрд╛рдВрдЪ, рдЬреИрд╕реЗ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рдо рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рджрдХреНрд╖рддрд╛ рдХреЗрд╡рд▓ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдкрд░ рдФрд░ рд╕реАрдзреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ (рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг) рдкрд░ рдЙрдкрдХрд░рдг рдХреЗ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд▓реЗрдЦрди рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдЪрд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛрд╖реЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ, рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд▓рдХреНрд╖реНрдп рд╣реИред
рд╕реМрднрд╛рдЧреНрдп рдФрд░ рд╕рдлрд▓рддрд╛!
рд╕рдВрджрд░реНрдн
рдпрд╣ 2020 рдореЗрдВ рдкрд╣рд▓рд╛ рдкреНрд░рдХрд╛рд╢рди рд╣реИред рдпрд╣ рдЕрд╡рд╕рд░ рд▓реЗрддреЗ рд╣реБрдП, рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ C # рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░реВрдБрдЧрд╛:

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