microsoft / binskim
Duplication

Places in code with 6 or more lines that are exactly the same.

Intro
  • For duplication, we look at places in code where there are 6 or more lines of code that are exactly the same.
  • Before duplication is calculated, the code is cleaned to remove empty lines, comments, and frequently duplicated constructs such as imports.
  • You should aim at having as little as possible (<5%) of duplicated code as high-level of duplication can lead to maintenance difficulties, poor factoring, and logical contradictions.
Learn more...
Duplication Overall
  • 5% duplication:
    • 11,400 cleaned lines of cleaned code (without empty lines, comments, and frequently duplicated constructs such as imports)
    • 672 duplicated lines
  • 39 duplicates
system5% (672 lines)
Duplication per Extension
cs6% (660 lines)
wixproj22% (12 lines)
Duplication per Component (primary)
src/BinSkim.Rules12% (444 lines)
src/BinaryParsers3% (144 lines)
src/Test.FunctionalTests.BinSkim.Rules1% (20 lines)
src/BinSkim.Driver3% (20 lines)
src/Test.UnitTests.BinaryParsers7% (18 lines)
src/Test.UnitTests.BinSkim.Driver6% (14 lines)
src/Test.Samples16% (12 lines)
ROOT0% (0 lines)
src/BinSkim.Sdk0% (0 lines)
src0% (0 lines)
src/BuildSamples0% (0 lines)
src/DefaultProject0% (0 lines)
src/Shared0% (0 lines)
src/Test.FunctionalTests.BinSkim.Driver0% (0 lines)
src/Test.UnitTests.BinSkim.Rules0% (0 lines)
Longest Duplicates
The list of 20 longest duplicates.
See data for all 39 duplicates...
Size#FoldersFilesLinesCode
27 x 2 src/BinaryParsers/PEBinary/PortableExecutable
src/BinaryParsers/PEBinary/PortableExecutable
ImageLoadConfigDirectory32.cs
ImageLoadConfigDirectory64.cs
51:80 (44%)
49:78 (44%)
view
22 x 2 src/BinSkim.Rules/DwarfRules
src/BinSkim.Rules/DwarfRules
BA3003.EnableStackProtector.cs
BA3005.EnableStackClashProtection.cs
164:203 (23%)
141:180 (27%)
view
21 x 2 src/BinSkim.Rules/DwarfRules
src/BinSkim.Rules/DwarfRules
BA3003.EnableStackProtector.cs
BA3005.EnableStackClashProtection.cs
39:80 (22%)
40:81 (25%)
view
16 x 2 src/BinaryParsers/PEBinary
src/BinaryParsers/PEBinary
NativeInterop.cs
NativeInterop.cs
28:77 (22%)
99:148 (22%)
view
16 x 2 src/BinSkim.Rules/PERules
src/BinSkim.Rules/PERules
BA2012.DoNotModifyStackProtectionCook...
BA2012.DoNotModifyStackProtectionCook...
122:145 (12%)
182:205 (12%)
view
14 x 2 src/BinSkim.Rules/PERules
src/BinSkim.Rules/PERules
BA2025.EnableShadowStack.cs
BA2026.EnableAdditionalSdlSecurityChe...
37:60 (29%)
37:60 (23%)
view
14 x 2 src/BinSkim.Rules/MachORules
src/BinSkim.Rules/MachORules
BA5001.EnablePositionIndependentExecu...
BA5002.DoNotAllowExecutableStack.cs
34:62 (26%)
34:62 (37%)
view
11 x 2 src/BinSkim.Rules/PERules
src/BinSkim.Rules/PERules
BA2002.DoNotIncorporateVulnerableDepe...
BA2007.EnableCriticalCompilerWarnings.cs
80:97 (10%)
67:84 (8%)
view
11 x 2 src/BinSkim.Rules/PERules
src/BinSkim.Rules/PERules
BA2002.DoNotIncorporateVulnerableDepe...
BA2006.BuildWithSecureTools.cs
82:98 (10%)
71:87 (6%)
view
11 x 2 src/BinSkim.Rules/ElfRules
src/BinSkim.Rules/ElfRules
BA3001.EnablePositionIndependentExecu...
BA3002.DoNotMarkStackAsExecutable.cs
37:56 (28%)
40:59 (28%)
view
10 x 2 src/BinSkim.Rules/PERules
src/BinSkim.Rules/PERules
BA2006.BuildWithSecureTools.cs
BA2007.EnableCriticalCompilerWarnings.cs
71:86 (6%)
69:84 (7%)
view
10 x 2 src/Test.FunctionalTests.BinSkim.Rules
src/Test.FunctionalTests.BinSkim.Rules
RuleTests.cs
RuleTests.cs
76:91 (1%)
224:239 (1%)
view
10 x 2 src/BinSkim.Rules/DwarfRules
src/BinSkim.Rules/DwarfRules
BA3005.EnableStackClashProtection.cs
BA3005.EnableStackClashProtection.cs
102:114 (12%)
128:141 (12%)
view
10 x 2 src/BinSkim.Driver/RoslynAnalyzer
src/BinSkim.Driver/RoslynAnalyzer
RoslynExtensionMethods.cs
RoslynExtensionMethods.cs
71:91 (19%)
97:117 (19%)
view
10 x 2 src/BinSkim.Rules/DwarfRules
src/BinSkim.Rules/DwarfRules
BA3003.EnableStackProtector.cs
BA3003.EnableStackProtector.cs
125:137 (10%)
151:164 (10%)
view
9 x 2 src/BinaryParsers/PEBinary/PortableExecutable
src/BinaryParsers/PEBinary/PortableExecutable
ImageLoadConfigDirectory32.cs
ImageLoadConfigDirectory64.cs
25:33 (14%)
23:31 (14%)
view
9 x 2 src/Test.UnitTests.BinaryParsers/Elf
src/Test.UnitTests.BinaryParsers/MachO
ElfBinaryTests.cs
MachOBinaryTests.cs
19:31 (8%)
18:30 (52%)
view
8 x 2 src/BinSkim.Rules/PERules
src/BinSkim.Rules/PERules
BA2025.EnableShadowStack.cs
BA2026.EnableAdditionalSdlSecurityChe...
66:80 (16%)
60:74 (13%)
view
8 x 2 src/BinSkim.Rules/ElfRules
src/BinSkim.Rules/ElfRules
BA3010.EnableReadOnlyRelocations.cs
BA3011.EnableBindNow.cs
42:56 (25%)
45:59 (17%)
view
8 x 2 src/BinSkim.Rules/PERules
src/BinSkim.Rules/PERules
BA2009.EnableAddressSpaceLayoutRandom...
BA2016.MarkImageAsNXCompatible.cs
56:68 (13%)
62:74 (20%)
view
Duplicated Units
The list of top 10 duplicated units.
See data for all 10 unit duplicates...
Size#FoldersFilesLinesCode
32 x 2 src/BinSkim.Rules/DwarfRules
src/BinSkim.Rules/DwarfRules
BA3003.EnableStackProtector.cs
BA3005.EnableStackClashProtection.cs
168:204 
145:181 
view
22 x 2 src/BinSkim.Driver/RoslynAnalyzer
src/BinSkim.Driver/RoslynAnalyzer
RoslynExtensionMethods.cs
RoslynExtensionMethods.cs
69:94 
95:120 
view
20 x 2 src/BinSkim.Rules/DwarfRules
src/BinSkim.Rules/DwarfRules
BA3003.EnableStackProtector.cs
BA3005.EnableStackClashProtection.cs
42:65 
43:66 
view
15 x 2 src/BinSkim.Rules/MachORules
src/BinSkim.Rules/MachORules
BA5001.EnablePositionIndependentExecu...
BA5002.DoNotAllowExecutableStack.cs
37:55 
37:55 
view
10 x 2 src/BinSkim.Rules/ElfRules
src/BinSkim.Rules/ElfRules
BA3001.EnablePositionIndependentExecu...
BA3002.DoNotMarkStackAsExecutable.cs
40:52 
43:55 
view
10 x 2 src/BinSkim.Rules/ElfRules
src/BinSkim.Rules/ElfRules
BA3010.EnableReadOnlyRelocations.cs
BA3011.EnableBindNow.cs
40:52 
43:55 
view
10 x 3 src/BinSkim.Rules/PERules
src/BinSkim.Rules/PERules
src/BinSkim.Rules/PERules
BA2002.DoNotIncorporateVulnerableDepe...
BA2006.BuildWithSecureTools.cs
BA2007.EnableCriticalCompilerWarnings.cs
80:93 
69:82 
67:80 
view
8 x 3 src/Test.UnitTests.BinaryParsers/Elf
src/Test.UnitTests.BinaryParsers/MachO
src/Test.UnitTests.BinaryParsers/PEBinary
ElfBinaryTests.cs
MachOBinaryTests.cs
PEBinaryTests.cs
21:29 
20:28 
21:29 
view
7 x 2 src/BinSkim.Rules/PERules
src/BinSkim.Rules/PERules
BA2012.DoNotModifyStackProtectionCook...
BA2012.DoNotModifyStackProtectionCook...
241:251 
253:263 
view
6 x 2 src/BinaryParsers/PEBinary/ProgramDatabase
src/BinaryParsers/PEBinary/ProgramDatabase
SourceFile.cs
Symbol.cs
122:128 
350:356 
view