SARIF SDK рдФрд░ рдЗрд╕рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ

рдЪрд┐рддреНрд░ 2


рдЖрдЬ, рд╣рдо рдПрдХ рдЕрдиреНрдп 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 { .... /// <summary>The MIME type to use when no better MIME type is known.</summary> public static readonly string Default = Binary; .... /// <summary>The MIME type for binaries.</summary> public static readonly string Binary = "application/octet-stream"; .... } 

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

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 (....) { // Replace the token with an embedded hyperlink. messageText = messageText.Replace(....); } else { // Replace the token with plain text. messageText = messageText.Replace(....); } .... } 

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

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 = null рд╣реИ , рддреЛ StackFrame рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ stackFrame = null рд░рд╣реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреИрдХрдлреНрд░реЗрдо.рд▓реЛрдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдкрд░ рдкрдбрд╝реЗрдЧрд╛ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рдЪреЗрдХ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣реА рд╣реИ, v1StackFrame рдХрд╛ рдЦрддрд░рдирд╛рдХ рдЙрдкрдпреЛрдЧ, рдЬрд┐рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛, рд╡рд╣ рднреА рдмрд┐рдВрджреБ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗрдЧрд╛ред рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЧреИрд░-рд╢реВрдиреНрдп v1StackFrame рдорд╛рди CreateStackFrame рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдпрд╣ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред CreateStackFrame рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ:

 Frames = v1Stack.Frames?.Select(CreateStackFrame).ToList() 

CreateStackFrame рдХрд╛ рдЪрдпрди рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рд░рд┐рдд рдЕрд╢рдХреНрдд рд╕рдорд╛рдирддрд╛ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ рд╣реИред рдлреНрд░реЗрдореНрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рднрд░рддреЗ рд╕рдордп рд╢рд╛рдпрдж рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдпрд╣ (рд╢реВрдиреНрдп рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реБрдП) рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрд╕ рджреВрд░ рддрдХ рдЦреБрджрд╛рдИ рдирд╣реАрдВ рдХреАред рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдХреЛрдб рдХреЛ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдзреНрдпрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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


рд▓реЗрдЦ рдЫреЛрдЯрд╛ рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдКрдмрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ :) рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдпрд╛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдЫреЛрдЯреА рд╕реА рдШреЛрд╖рдгрд╛: рдореЗрд░рд╛ рдЕрдЧрд▓рд╛ рд▓реЗрдЦ 2019 рдореЗрдВ рд╕реА # рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореБрдЭреЗ рдФрд░ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рдорд┐рд▓реА рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдХреЛ рдлреЙрд▓реЛ рдХрд░реЗрдВред рдЬрд▓реНрдж рдорд┐рд▓рддреЗ рд╣реИрдВ!

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




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

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


All Articles