
рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реА Microsoft рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рд╡реАрдПрд╕рдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рд╡реАрд░рддрд╛рдкреВрд░реНрд╡рдХ рдХрд░реЗрдВрдЧреЗред SARIF, рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдЗрдВрдЯрд░рдЪреЗрдВрдЬ рдлреЙрд░реНрдореЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк, рдЬреЛ рдПрдХ рдорд╛рдирдХ (рдлрд╛рдЗрд▓ рдлреЙрд░реНрдореЗрдЯ) рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмрд╛рддрдЪреАрдд рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: IDEs, рдЬрдЯрд┐рд▓ рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг (рдЬреИрд╕реЗ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм), рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА, рдЖрджрд┐ SARIF SDK, рдХреНрд░рдорд╢рдГ, SARIF рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .NET рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рд╣реИрдВред
SARIF Microsoft рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рдФрд░ рдЕрдм OASIS (рдПрдХ рдЧреИрд░-рд▓рд╛рднрдХрд╛рд░реА рд╕рдВрдШ рдЬреЛ рдЦреБрд▓реЗ рдорд╛рдирдХреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ) рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдорд╛рдирдХ рд╣реИред SARIF рди рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрдкрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рднреА рд╣реИ, рд╕рд╛рде рд╣реА рдпрд╣ рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕ рдкрд░ рдбреЗрдЯрд╛, рд╕рдордп рдЯреИрдЧ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП,
OASIS рд╡реЗрдмрд╕рд╛рдЗрдЯ рджреЗрдЦреЗрдВред SARIF SDK рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб GiHub рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдореБрдЦрдкреГрд╖реНрда
рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
SARIF SDK рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЫреЛрдЯрд╛: 799 .cs рдлрд╛рдЗрд▓реЗрдВ (рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 98,000 рдЧреИрд░-рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЗрдВ) рдирд┐рдХрд▓рд╛ред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╣рдореЗрд╢рд╛ рдЪреЗрдХ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрддрд╛ рд╣реВрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЬрд┐рд╕ рдХреЛрдб рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗ, рд╡рд╣ 642 .cs рдлрд╛рдЗрд▓реЗрдВ (рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 79,000 рдЧреИрд░-рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЗрдВ) рдереАред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдкреНрд▓рд╕ рдУрд░, рдЪреЗрдХ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬ рдерд╛, рдЗрд╕рдХреЗ рдмреАрдЪ рдФрд░ рдлрд┐рд░, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪрд┐рддреНрд░ рдкрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдмрд╣рд░рд╣рд╛рд▓, рдореИрдВ рдХреБрдЫ рдЕрдирдЬрд╛рди рдорд╛рдорд▓реЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдЖрдЗрдП рдЙрди рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред
рддреНрд░реБрдЯрд┐рдпрд╛рдБ
V3070 [CWE-457] 'рдбрд┐рдлреЙрд▓реНрдЯ' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп
Uninitialized рдЪрд░ 'рдмрд╛рдЗрдирд░реА' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред MimeType.cs 90
public static class MimeType { ....
рдлрд╝реАрд▓реНрдб рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рди рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрднреА рддрдХ рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдирддреАрдЬрддрди,
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреА рдЧрдИ, рдХреНрдпреЛрдВрдХрд┐
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреАрдЬреЗрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЕрдиреБрдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд░реИрд╢ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред
V3061 рдкреИрд░рд╛рдореАрдЯрд░ 'рд▓реЙрдЬрд┐рдХрд▓рд▓реЛрдХреЗрд╢рдирдЯреЙрдЗрдВрдбреЗрдХреНрд╕рдкреЗрдЬрд╝' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрд╢рд╛ рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рдп рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред PrereleaseCompatibilityTransformer.cs 1963
private static JArray ConvertLogicalLocationsDictionaryToArray( .... Dictionary<LogicalLocation, int> logicalLocationToIndexMap, ....) { .... logicalLocationToIndexMap = new Dictionary<LogicalLocation, int>(LogicalLocation.ValueComparer); .... }
рдХреЛрдб рд▓реЗрдЦрдХ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ
рд▓реЙрдЬрд┐рдХрд▓рд▓реЙрдЯреЗрд╢рдирдЯреЙрдЗрдВрдбрдПрдХреНрд╕рдкреНрд▓рд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдореВрд▓реНрдп рд▓рд┐рдЦрддрд╛ рд╣реИред рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд, рдкрд┐рдЫрд▓рд╛ рдорд╛рди рдмрд┐рд▓рдХреБрд▓ рдЦрд╛рд▓реА рд╢рдмреНрджрдХреЛрд╢ рд╣реИ, рдЬреЛ рдХреЙрд▓рд░ рдХреЛрдб рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
private static bool ApplyChangesFromTC25ThroughTC30(....) { .... Dictionary<LogicalLocation, int> logicalLocationToIndexMap = null; .... logicalLocationToIndexMap = new Dictionary<LogicalLocation, int>(LogicalLocation.ValueComparer); run["logicalLocations"] = ConvertLogicalLocationsDictionaryToArray( ...., logicalLocationToIndexMap, ....); }
рдЕрдЬреАрдм рдФрд░ рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдбред
V3008 [CWE-563] 'run.Tool' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 116, 114. ExportRulesMetadataCommandBase.cs 116
public partial class Run { .... public Tool Tool { get; set; } .... } public partial class Tool : .... { .... public Tool() { } .... } private void OutputSarifRulesMetada(....) { .... var run = new Run(); run.Tool = new Tool(); run.Tool = Tool.CreateFromAssemblyData(....);
рд░рди.рдЯреВрд▓ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рджреЛ рдмрд╛рд░ рдПрдХ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЯреВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдФрд░
рдЯреВрд▓ рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ рд╡реИрд▓реНрдпреВ рд▓рд┐рдЦрддреЗ рд╕рдордп рджреЛрдиреЛрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреБрди: рд╕реМрдВрдкрдиреЗ рд╕реЗ рдордЫрд▓реА рдХреА рдЧрдВрдз рдЖрддреА рд╣реИред
V3042 [CWE-476] рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 'loc' рдСрдмреНрдЬреЗрдХреНрдЯ WhereComparer.cs 152 рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
private static Uri ArtifactUri(ArtifactLocation loc, Run run) { return loc?.Uri ?? loc.Resolve(run)?.Uri; }
рдпрджрд┐
рд▓реЛрдХ рдЪрд░ рдХрд╛ рдорд╛рди
рд╢реВрдиреНрдп рд╣реИ , рддреЛ рдорд╛рди рдХреЗ рджрд╛рд╣рд┐рдиреЗ рднрд╛рдЧ рд╕реЗ рдорд╛рди рд▓реМрдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдСрдкрд░реЗрдЯрд░, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
V3042 [CWE-476] рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 'FormatString' рдСрдмреНрдЬреЗрдХреНрдЯ InsertOptionalDataVisitor.cs 194 рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
public override Message VisitMessage(Message node) { .... node.Text = node.Arguments?.Count > 0 ? string.Format(...., formatString.Text, ....) : formatString?.Text; .... }
рдбреЗрд╡рд▓рдкрд░реНрд╕
рд╕рд╢рд░реНрдд рдХреА рджреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд
рд╕реНрд╡рд░реВрдкрдг рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд╣реБрдВрдЪ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред: рдСрдкрд░реЗрдЯрд░ред
V3042 [CWE-476] рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 'messageText' рдСрдмреНрдЬреЗрдХреНрдЯ FortifyFprConverter.cs 1210 рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
V3042 [CWE-476] рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 'messageText' рдСрдмреНрдЬреЗрдХреНрдЯ FortifyFprConverter.cs 1216 рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
private void AddMessagesToResult(Result result) { .... string messageText = (rule.ShortDescription ?? rule.FullDescription)?.Text; .... if (....) {
рдпрд╣рд╛рдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЛ рд╕рдВрджреЗрд╢ рдЬрд╛рд░реА рдХрд┐рдП рд╣реИрдВ рдЕрд╢рдХреНрдд
рд╕рдВрджреЗрд╢ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрднрд╡ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрд╣ рдмрд▓реНрдХрд┐ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред
V3080 [CWE-476] рд╕рдВрднрд╛рд╡рд┐рдд
рдЕрд╢рд╛рдВрддрд┐ ред 'FileDataVersionOne.Uri' рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред SarifCurrentToVersionOneVisitor.cs 1030
private IDictionary<string, FileDataVersionOne> CreateFileDataVersionOneDictionary() { .... FileDataVersionOne fileDataVersionOne = CreateFileDataVersionOne(v2File); if (fileDataVersionOne.Uri.OriginalString.Equals(key)) { .... } .... }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐
рдлрд╝рд╛рдЗрд▓рдбреИрд╡рд░реНрдЯреЗрд╢рди рдУрдиреЗ.рдЙрд░реА рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп
NullReferenceException рд╕рдВрднрд╡ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдЪрд░ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рд╣реА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП
CreateFileDataVersionOne рд╡рд┐рдзрд┐ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
private FileDataVersionOne CreateFileDataVersionOne(Artifact v2FileData) { FileDataVersionOne fileData = null; if (v2FileData != null) { .... fileData = new FileDataVersionOne { .... Uri = v2FileData.Location?.Uri, .... }; .... } return fileData; } public partial class FileDataVersionOne { .... public Uri Uri { get; set; } .... }
рджрд░рдЕрд╕рд▓,
FileDataVersionOne рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╕рдордп,
рдЙрд░реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ
рд╢реВрдиреНрдп рдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдорд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдЗрдВрдЯрд░рдкреНрд░реЛрдбреЗрдХреНрдЯреНрд░рд┐рдпрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рддрдВрддреНрд░ рд╣реИред
V3080 [CWE-476] рд╕рдВрднрд╛рд╡рд┐рдд
рдЕрд╢рд╛рдВрддрд┐ ред '_JsonTextWriter' рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред SarifLogger.cs 242
public virtual void Dispose() { .... if (_closeWriterOnDispose) { if (_textWriter != null) { _textWriter.Dispose(); } if (_jsonTextWriter == null) { _jsonTextWriter.Close(); }
рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐
_jsonTextWriter! = Null рдХреЛ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛрдирд╛ рд╣реИред рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЦрддрд░реЗ рдореЗрдВ рд╣реИ, рдпрд╣ рджреБрд░реНрдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реИ,
_jsonTextWriter рдХреЗ рдиреЙрдирдмреБрд▓ рд╣реЛрдиреЗ рдХреЗ
рдХрд╛рд░рдг ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзрд╛рд░рд╛ рдЦреБрд▓рд╛ рд░рд╣рддрд╛ рд╣реИред
V3083 [CWE-367] 'RuleRead', NullReferenceException рдШрдЯрдирд╛ рдХреЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЖрд╣реНрд╡рд╛рди рд╕рдВрднрд╡ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдШрдЯрдирд╛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред FxCopConverter.cs 897
private void ReadRule(....) { .... if (RuleRead != null) { RuleRead(....); } .... }
рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмреЗрд╡рдЬрд╣ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдмрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЯрд┐рдк рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗред рдпрд╣рд╛рдБ IDE рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИ:
private void ReadRule(....) { .... RuleRead?.Invoke(....); .... }
рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдм рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЖрдИрдбреАрдИ рдХреЛрдб рдХреЛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдПрдХ рдФрд░ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ред
- V3083 [CWE-367] рдЗрд╡реЗрдВрдЯ 'ResultRead' рдХрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЖрдордВрддреНрд░рдг, NullReferenceException рд╕рдВрднрд╡ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдШрдЯрдирд╛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред FxCopConverter.cs 813
V3095 [CWE-476] рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'v1Location' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 333, 335. SarifVersionOneToCurrentVisitor.cs 333
internal Location CreateLocation(LocationVersionOne v1Location) { .... string key = v1Location.LogicalLocationKey ?? v1Location.FullyQualifiedLogicalName; if (v1Location != null) { .... } .... }
рд▓реЗрдЦрдХ рдиреЗ рд╕реЛрдЪрд╛ рдХрд┐
v1Location рд╕рдВрджрд░реНрдн рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЙрдЪрд┐рдд рдЬрд╛рдВрдЪ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдКрдкрд░ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдВрджрд░реНрдн рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЬрд╛рдБрдЪ рдХреЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд╕рд╛рд╡рдзрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛? рдЦреИрд░, рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗред
V3125 [CWE-476] 'v1StackFrame' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1182, 1171ред SarifVersionOneToCurrentVisitor.cs 1182
internal StackFrame CreateStackFrame(StackFrameVersionOne v1StackFrame) { StackFrame stackFrame = null; if (v1StackFrame != null) { stackFrame = new StackFrame { .... }; } stackFrame.Location = CreateLocation(v1StackFrame.FullyQualifiedLogicalName, v1StackFrame.LogicalLocationKey, ....); return stackFrame; }
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдпрд╣рд╛рдБ рдПрдХ рдЙрд▓реНрдЯрд╛ рдорд╛рдорд▓рд╛ рдЖрддрд╛ рд╣реИред рдкрд╣рд▓реЗ
v1StackFrame рд╕рдВрджрд░реНрдн
рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЬрд╛рдБрдЪ рднрдЯрдХ рдЧрдИ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреЗрддрд╛рд╡рдиреА рд╣реИ:
v1StackFrame рдФрд░
stackFrame рдЪрд░ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рджреЗрдЦреЗрдВ, рдпрджрд┐
v1StackFrame рд╢реВрдиреНрдп рд╣реИ , рддреЛ
StackFrame рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐
stackFrame рд╕реБрд╕реНрдд рд░рд╣реЗрдЧрд╛
ред рд╕реНрдЯреИрдХрдлреНрд░реЗрдо.рд▓реЛрдХреЗрд╢рди рдХреА рдПрдХ рдХреЙрд▓ рдХреЗ рдХрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд░реИрд╢ рджреНрд╡рд╛рд░рд╛ рдкреАрдЫрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рдЪреЗрдХ рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдпрд╣ рдЦрддрд░рдирд╛рдХ
v1StackFrame рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рднреА рдирд╣реАрдВ рдЖрдПрдЧрд╛, рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдк Nonnull
v1StackFrame рдорд╛рди
CreateStackFrame рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд╢рдХ рдерд╛ рдХрд┐ рдХреЙрд▓рд░ рдХреЛрдб рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
CreateStackFrame рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ:
Frames = v1Stack.Frames?.Select(CreateStackFrame).ToList()
CreateStackFrame рдХрд╛
рдЪрдпрди рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдпрд╣рд╛рдБ
рдЕрд╢рдХреНрдд рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж,
рдлреНрд░реЗрдореНрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рднрд░рддреЗ рд╕рдордп рдЗрд╕реЗ (рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рд▓реЗрдЦрди) рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╣реБрдд рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдХреЛрдб рдХреЛ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдзреНрдпрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдЦ рд▓рдВрдмрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд╢ рдкрдарди рдХрд╛ рдЖрдирдВрдж рд▓рд┐рдпрд╛ рд╣реИ :) рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдпрд╛ рдХрд┐рд╕реА рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╣рдореЗрд╢рд╛
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдЫреЛрдЯреА рд╕реА рдШреЛрд╖рдгрд╛: рдореЗрд░рд╛ рдЕрдЧрд▓рд╛ рд▓реЗрдЦ рдЙрди рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ рдЬреЛ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдФрд░ рдореБрдЭреЗ 2019 рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдорд┐рд▓реА рдереАрдВред рд╣рдорд╛рд░реЗ
рдмреНрд▓реЙрдЧ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВред рдорд┐рд▓рддреЗ рд╣реИрдВ!
рдирдП рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрди рдЪреИрдирд▓реЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВ: