.NET рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА GitHub рдкрд░ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп C # рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рдХрд┐ рдЗрд╕рдХреА рд╡реНрдпрд╛рдкрдХ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЕрдВрдзреЗрд░реЗ рдХреЛрдиреЛрдВ рдХреЛ рдХреНрдпрд╛ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╕рднреА рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ?
рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдбреЗрдврд╝ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЧрдпрд╛ред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдмреИрда рдЧрдпрд╛ рдХрд┐ .NET рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХ рдЯрд┐рдбрдмреЗрдЯ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдБрдЪрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред рдХрдИ рдмрд╛рд░ рдореИрдВрдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рди рдорд┐рд▓реЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рддреНрд╡рд░рд┐рдд рд╕реНрдХреНрд░реЙрд▓ рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝ рдкрд╛рдпрд╛ред рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ - рдХрд┐рдпрд╛! рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдЦ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ
рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдбреБрдмрдХреА рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ - рдЖрдк рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ - рдпрд╣рд╛рдВ рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдФрд░ рдмрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдореИрдВрдиреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред
рдЕрдВрдХреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛
рд╕рдВрднрд╡рддрдГ, рдпрд╣ рдмрддрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ CoreFX (.NET рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝) рдХреНрдпрд╛ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕реЗ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИ, рддреЛ рд╡рд┐рд╡рд░рдг рдиреАрдЪреЗ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд░реАрдлрд╝реНрд░реЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ
GitHub рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреЗрдЬ рд╕реЗ рд▓рд┐рдпрд╛, рдЬрд╣рд╛рдБ рдЖрдк рд╕реНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд┐рд╡рд░рдг:
рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ .NET рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЬрд┐рд╕реЗ "CoreFX" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рдореЗрдВ System.Collections, System.IO, System.Xml, рдФрд░ рдХрдИ рдЕрдиреНрдп рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕рдВрдмрдВрдзрд┐рдд .NET рдХреЛрд░ рд░рдирдЯрд╛рдЗрдо рд░реЗрдкреЛ (рдЬрд┐рд╕реЗ "CoreCLR" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдореЗрдВ .NET рдХреЛрд░ рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЗрд╕рдореЗрдВ RyuJIT, .NET GC рдФрд░ рдХрдИ рдЕрдиреНрдп рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд░рдирдЯрд╛рдЗрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб (System.PStreet.CoreLib) CoreCLR рд░реЗрдкреЛ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдЗрд╕реЗ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдмрдирд╛рдпрд╛ рдФрд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред CoreFX рдХреЗ рдмрд╛рдХреА рд░рдирдЯрд╛рдЗрдо-рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдХреЗ рдЕрдЬреНрдЮреЗрдп рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЧрдд .NET рд░рдирдЯрд╛рдЗрдо (рдЬреИрд╕реЗ CoreRT) рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡рд┐рдзрд┐
рдореИрдВрдиреЗ
PVS-Studio рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХреАред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рди рдХреЗрд╡рд▓ рд╕реА # рдХреЛрдб, рдмрд▓реНрдХрд┐ рд╕реА, рд╕реА ++, рдЬрд╛рд╡рд╛ рдХрд╛ рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕реА # рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЕрдм рддрдХ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕реА, рд╕реА ++, рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреЛрдб рдЖрдк рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕, рдореИрдХрдУрдПрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП C # рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ (рд╕рдВрд╕реНрдХрд░рдгреЛрдВ 2010-2019 рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ) рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ: рд╕рдорд╛рдзрд╛рди рдЦреЛрд▓реЗрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░реЗрдВ, рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред CoreFX рдХреЗ рд╕рд╛рде, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдИрдВред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдПрдХрд▓ .sln рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЦреЛрд▓рдирд╛ рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реНрдг рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╢рд╛рдпрдж, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ - рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрд╕ рдЖрдХрд╛рд░ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ PVS-Studio рд╡рд┐рддрд░рдг рдХрд┐рдЯ рдореЗрдВ MSBuild рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ (рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, .sln) рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рдерд╛ рдЬреЛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП "PVS-Studio_Cmd.exe" рдЪрд▓рд╛рдПрдЧрд╛ред CoreFX рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ .ln рд╣реЛрдЧрд╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓реЙрдиреНрдЪ рдзреНрд╡рдЬ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд) рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ред
рджреЗрдЦрд╛! - рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд▓реЙрдЧ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд▓реЙрдЧреНрд╕ рдХреЛ PlogConverter рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рддрд░рдг рдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╕рдордп, рдореИрдВ docs.microsoft.com рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ nuget.org рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз NuGet рдкреИрдХреЗрдЬ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реВрдВред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреЛрдб / рдкреИрдХреЗрдЬ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдХ рд╕реЗ рдереЛрдбрд╝рд╛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реЛрдЧрд╛ рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдХрдИ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╡реЗ рдкреИрдХреЗрдЬ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ - рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдорд╛рди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкрд░ NuGet рд╕реЗ рдкреИрдХреЗрдЬ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рдЬрдирди рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдирдИ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ "рдЫреБрдЖ" рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреБрдЫ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдХреЛрдб рдорд┐рд╕-рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ docs.microsoft.com рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ nuget.org рд╕реЗ рд╕рдВрдХреБрд▓ рдкрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
рдореИрдВ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдХрд╛ рд╡рд┐рд╡рд░рдг, рд╕рд╛рде рд╣реА рдкреИрдХреЗрдЬ рдореЗрдВ (рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ) рдЬрд╛рдирдХрд╛рд░реА (рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ) рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрди рдХреЗ рджреМрд░рд╛рди рдмрджрд▓ рд╕рдХрддреА рд╣реИрдВред
рдЕрдиреНрдп рд╕рд┐рджреНрдз рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ
рд╡реИрд╕реЗ, рдпрд╣ рдПрдХ рдЕрдиреВрдард╛ рд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реВрдЪреА
рдпрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд╛рдЗрдЯ рдкрд░ рд╣рдордиреЗ рди рдХреЗрд╡рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рд▓реЗрдЦ рдПрдХрддреНрд░ рдХрд┐рдП рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕реА, рд╕реА ++, рд╕реА #, рдЬрд╛рд╡рд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рд┐рд░реНрдл рджрд┐рд▓рдЪрд╕реНрдк рдиреЛрдЯреНрд╕ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рддрдХрдиреАрдХреА рд▓реЗрдЦ рднреА рд╣реИрдВред рдЖрдк рдпрд╣ рд╕рдм
рдмреНрд▓реЙрдЧ рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдиреЗ рдкрд╣рд▓реЗ 2015 рдореЗрдВ .NET рдХреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдерд╛ред рдкрд┐рдЫрд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "
рдирдП рд╕рд╛рд▓ рдХреА рдЬрд╛рдВрдЪ .NET рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (CoreFX) ред"
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ, рд╕рдВрджрд┐рдЧреНрдз рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рди
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЙрдкрд░реЛрдХреНрдд рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдкрдврд╝реЗрдВред
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
рдЕрдВрдХ N рдХреЗ рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ - рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рдВ, рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдВрд╢реЛрдВ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рдирд╛ рднреА рдЖрд╕рд╛рди рд╣реИред
рдЕрдВрдХ 1abstract public class Principal : IDisposable { .... public void Save(PrincipalContext context) { .... if ( context.ContextType == ContextType.Machine || _ctx.ContextType == ContextType.Machine) { throw new InvalidOperationException( SR.SaveToNotSupportedAgainstMachineStore); } if (context == null) { Debug.Assert(this.unpersisted == true); throw new InvalidOperationException(SR.NullArguments); } .... } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА :
V3095 'рд╕рдВрджрд░реНрдн' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд░реЗрдЦрд╛рдПрдБ: 340, 346. рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ .cs 340
рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐
рд╕рдВрджрд░реНрдн рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП
рдЕрд╢рдХреНрдд рдорд╛рди рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ
InvalidOperationException рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд╣реИ, рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
рд╕рдВрджрд░реНрдн рд▓рд┐рдВрдХ рдХреА рдПрдХ рдмрд┐рдирд╛ рд╢рд░реНрдд рдбреАрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рд╣реИ -
рд╕рдВрджрд░реНрдн ред
рдХреЙрдирдЯреЗрдХреНрд╕реНрдЯ рдЯрд╛рдЗрдк ред рдирддреАрдЬрддрди, рдпрджрд┐
рд╕рдВрджрд░реНрдн рдХрд╛ рдореВрд▓реНрдп
рд╢реВрдиреНрдп рд╣реИ , рддреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд
рдЕрдорд╛рдиреНрдп рдЕрдорд╛рдиреНрдп рдСрдкреНрд╢рди рдХреЗ рдмрдЬрд╛рдп
NullReferenceException рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ
рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЗрдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА (
System.DirectoryServices.AccountManagement ) рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
GroupPrincipal groupPrincipal = new GroupPrincipal(new PrincipalContext(ContextType.Machine)); groupPrincipal.Save(null);
GroupPrincipal рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ
рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ
рд╕рд╣реЗрдЬреЗрдВ рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, рдЖрдк NuGet рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЙрд╕реА рддрд░рд╣ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг 4.5.0 рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ред
рдЕрдВрдХ 2 private SearchResultCollection FindAll(bool findMoreThanOne) { searchResult = null; DirectoryEntry clonedRoot = null; if (_assertDefaultNamingContext == null) { clonedRoot = SearchRoot.CloneBrowsable(); } else { clonedRoot = SearchRoot.CloneBrowsable(); } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА :
V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред DirectorySearcher.cs 629
рднрд▓реЗ рд╣реА
_assertDefaultNamingContext == рдЕрд╢рдХреНрдд рд╕реНрдерд┐рддрд┐ рдХреА рд╕рдЪреНрдЪрд╛рдИ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдПрдХ рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдПрдЧреА,
рддрдм рд╕реЗ рдФрд░
рдЕрдЧрд░ рдмрдпрд╛рди рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рдирд┐рдХрд╛рдп рд╣реИрдВред рдпрд╛ рддреЛ рдХрд┐рд╕реА рд╢рд╛рдЦрд╛ рдореЗрдВ рдПрдХ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЖрдк рдЗрд╕
рдХрдерди рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВред
рдЕрдВрдХ 3 public class DirectoryEntry : Component { .... public void RefreshCache(string[] propertyNames) { .... object[] names = new object[propertyNames.Length]; for (int i = 0; i < propertyNames.Length; i++) names[i] = propertyNames[i]; .... if (_propertyCollection != null && propertyNames != null) .... .... } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА :
V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ '
рдЧреБрдгрдирд╛рдо ' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрди: 990, 1004ред DirectoryEntry.cs 990
рдлрд┐рд░ рд╕реЗ рд╣рдо рдПрдХ рдЕрдЬреАрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВред рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ
рдЧреБрдгрдирд╛рдо рд╣реИ! = рдЕрд╢рдХреНрдд рдЪреЗрдХ, рдЕрд░реНрдерд╛рдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЦреБрдж рдХреЛ рдмреАрдорд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдзрд┐
рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреА рд╣реИ ред рдпрд╣рд╛рдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ рдЖрдк рдЗрд╕ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрдИ рдкрд╣реБрдВрдЪ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ -
рд╕рдВрдкрддреНрддрд┐рдирд╛рдо рдФрд░
рдЧрддрд┐ рдФрд░
рд╕рдВрдкрддреНрддрд┐рдирд╛рдо [i] ред рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ - рдпрджрд┐ рдХреЛрдИ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рд╡рд┐рдзрд┐ рдХреЗ рдкрд╛рд╕ рд╣реИ, рддреЛ
NullReferenceExcepption рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж
рд╣реЛрдЧрд╛ ред
рдХреНрдпрд╛ рдПрдХ рд╕рдВрдпреЛрдЧ рд╣реИ рдХрд┐
RefreshCache рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдЪреНрдЫрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ -
System.DirectoryServices - рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд▓рд┐рдЦреЗрдВ:
DirectoryEntry de = new DirectoryEntry(); de.RefreshCache(null);
рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЪрд▓рд╛рдПрдВ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЪрд┐рддреНрд░ рджреЗрдЦреЗрдВред
рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, рдЖрдк NuGet рдкреИрдХреЗрдЬ рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо NuGet рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП
System.DirectoryServices рдкреИрдХреЗрдЬ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 4.5.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ) рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдХрдо рд╣реИред
рдЕрдВрдХ 4рдЕрдм рд╣рдо рд╡рд┐рдкрд░реАрдд рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ - рдкрд╣рд▓реЗ рдЙрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдВрджрд░ рджреЗрдЦреЗрдВред рдЖрдЗрдП
System.Drawing.CharacterRange рдХреЗ
System.Drawing.Common рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдЙрд╕реА рдирд╛рдо рдХреЗ NuGet рдкреИрдХреЗрдЬ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦреЗрдВред
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
CharacterRange range = new CharacterRange(); bool eq = range.Equals(null); Console.WriteLine(eq);
рд╕реНрдореГрддрд┐ рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП
docs.microsoft.com рдХреА рдУрд░ рд░реБрдЦ рдХрд░реЗрдВрдЧреЗ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
obj.Equals (рд╢реВрдиреНрдп) рд╕реЗ рдХреНрдпрд╛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреА рдЙрдореНрдореАрдж рд╣реИ:
рд╕рдорд╛рди (рдСрдмреНрдЬреЗрдХреНрдЯ) рд╡рд┐рдзрд┐ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрдерди рд╕рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реВрдЪреА рдореЗрдВ, x, y, рдФрд░ z рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИрдВред....x.Equals (рд╢реВрдиреНрдп) рдЧрд▓рдд рджреЗрддрд╛ рд╣реИредрдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рда "рдЧрд▓рдд" рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдмреЗрд╢рдХ, рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред :) рд╣рдо рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
рдиреВрдЧреЗрдЯ рдкреИрдХреЗрдЬ
System.Drawing.Common рд╕рдВрд╕реНрдХрд░рдг 4.5.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдерд╛ред рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдбрд┐рдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВ:
рдЕрдм рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ -
рдЕрдХреНрд╖рд░ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рдореЗрдВ
рд╕рдорд╛рди рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
public override bool Equals(object obj) { if (obj.GetType() != typeof(CharacterRange)) return false; CharacterRange cr = (CharacterRange)obj; return ((_first == cr.First) && (_length == cr.Length)); }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА :
V3115 'null' рдХреЛ 'рдмрд░рд╛рдмрд░' рдкрджреНрдзрддрд┐ рд╕реЗ 'NullReferenceException' рдореЗрдВ
рдкрд░рд┐рдгрд╛рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд░рд┐рддреНрд░рд░рдВрдЧред релрем
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ -
obj рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг
NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ
GetType рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрдХ 5рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЬрдЧрд╣ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ -
Icon.Save рд╡рд┐рдзрд┐ред рдЕрдзреНрдпрдпрди рд╕реЗ рдкрд╣рд▓реЗ, рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВред
рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИ:
рд╣рдо docs.microsoft.com - "
Icon.Save (рд╕реНрдЯреНрд░реАрдо) рд╡рд┐рдзрд┐ " рдХреА рдУрд░
рдореБрдбрд╝рддреЗ рд╣реИрдВ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрдирдкреБрдЯ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрддреНрдкрдиреНрди рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред
рдЕрдм рдХреЛрдб рдЕрдиреБрд╕рдВрдзрд╛рди рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
public sealed partial class Icon : MarshalByRefObject, ICloneable, IDisposable, ISerializable { .... public void Save(Stream outputStream) { if (_iconData != null) { outputStream.Write(_iconData, 0, _iconData.Length); } else { .... if (outputStream == null) throw new ArgumentNullException("dataStream"); .... } } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА :
V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'outputStream' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 654, 672. Icon.Windows.cs 654
рдлрд┐рд░ рд╕реЗ, рд╣рдо рдЬреЛ рдХрд╣рд╛рдиреА рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡рд╣ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдбреАрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░
рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдбрд┐рд░реЗрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдпреЛрдЬрди - рджреЛрдиреЛрдВ рд╡рд░реНрдЧ рдФрд░ рд╡рд┐рдзрд┐ - рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдп рд╕рд░рд▓ рд╣реИ - рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╕реНрдЯреНрд░реАрдо (_iconData, 0, _iconData.Length); рдЪрд░
рдЖрдЙрдЯрдкреБрдЯрд╕реНрдЯреНрд░реАрдо рдХрд╛ рдорд╛рди рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП -
рдЕрд╢рдХреНрдд ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рд╕реНрдерд┐рддрд┐
_iconData! = рдирд▓ рд╕рдВрддреБрд╖реНрдЯ рд╣реИред
рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рджреЗрдЦреЗрдВ:
public Icon(string fileName) : this(fileName, 0, 0) { }
рд╡рд╣ рдмрд╕ рдХрд┐рд╕реА рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдХрд╛рдо рд╕реМрдВрдкрддрд╛ рд╣реИред рдЦреИрд░, рдЖрдЧреЗ рджреЗрдЦреЗрдВ - рдпрд╣рд╛рдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ред
public Icon(string fileName, int width, int height) : this() { using (FileStream f = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { Debug.Assert(f != null, "File.OpenRead returned null instead of throwing an exception"); _iconData = new byte[(int)f.Length]; f.Read(_iconData, 0, _iconData.Length); } Initialize(width, height); }
рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ, рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрджрд┐ рд╣рдо рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдореЗрдердб рдореЗрдВ рдХреЛрдИ рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ
_iconData рдлреАрд▓реНрдб рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд┐рд╣реНрди рдХреЗ рд╕рд╛рде
рдЖрдЗрдХрди рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░
рд╕рд╣реЗрдЬреЗрдВ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓
рдХрд░реЗрдВ , рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ
рдЕрд╢рдХреНрдд , рдЬреЛ рд╣рдо рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
Icon icon = new Icon(@"D:\document.ico"); icon.Save(null);
рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред
рдЕрдВрдХ 6рд╣рдо рд╕рдореАрдХреНрд╖рд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдФрд░
System.Management рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред
CimType.UInt32 рдФрд░ рд╢реЗрд╖
рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ 3 рдЕрдВрддрд░ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
private static string ConvertToNumericValueAndAddToArray(....) { string retFunctionName = string.Empty; enumType = string.Empty; switch(cimType) { case CimType.UInt8: case CimType.SInt8: case CimType.SInt16: case CimType.UInt16: case CimType.SInt32: arrayToAdd.Add(System.Convert.ToInt32( numericValue, (IFormatProvider)CultureInfo.InvariantCulture .GetFormat(typeof(int)))); retFunctionName = "ToInt32"; enumType = "System.Int32"; break; case CimType.UInt32: arrayToAdd.Add(System.Convert.ToInt32( numericValue, (IFormatProvider)CultureInfo.InvariantCulture .GetFormat(typeof(int)))); retFunctionName = "ToInt32"; enumType = "System.Int32"; break; } return retFunctionName; }
рдмреЗрд╢рдХ, рдХреЛрдИ рдорддрднреЗрдж рдирд╣реАрдВ рд╣реИрдВ, рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА :
V3139 рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗрд╕-рд╢рд╛рдЦрд╛рдПрдБ рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред WMIGenerator.cs 5220
рдХреЛрдб рдХреА рдпрд╣ рд╢реИрд▓реА рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдпрд╣рд╛рдВ рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рддрд░реНрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдлреИрд▓рд╛рдирд╛ рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рдерд╛ред
рдЕрдВрдХ 7Microsoft.CSharp рд▓рд╛рдЗрдмреНрд░реЗрд░реАред
private static IList<KeyValuePair<string, object>> QueryDynamicObject(object obj) { .... List<string> names = new List<string>(mo.GetDynamicMemberNames()); names.Sort(); if (names != null) { .... } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :
V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдирд╛рдо! = рдирд▓' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реИред рдбрд╛рдпрдиреЗрдорд┐рдХрдбреЗрдмрдЧрд░рдкреНрд░реЙрдХреНрд╕реА .cs 426
рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдХрдИ
рд╕рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ
V3022 рдФрд░
V3063 рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдереЗред рдХрдИ (рдмрд╣реБрдд рд╕рд╛рд░реА) рдЕрдЬреАрдм рдЬрд╛рдБрдЪреЗрдВ рд╣реБрдИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдореЗрд░реА рдЖрддреНрдорд╛ рдореЗрдВ рдбреВрдм рдЧрдИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдЪрд░
рдирд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдЗрд╕ рдЪрд░ рдХреЗ рд╕рд╛рде
рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рди рдХреЗрд╡рд▓ рдирдП рдмрдирд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИ, рдпрд╣ рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐ рдХреЛ
рд╕реЙрд░реНрдЯ рднреА рдХрд╣рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ, рдмреЗрд╢рдХ, рд▓реЗрдХрд┐рди рдЬрдЧрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдореЗрд░реЗ рд▓рд┐рдПред
рдЕрдВрдХ 8рдпрд╣рд╛рдБ рдХреЛрдб рдХрд╛ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЯреБрдХрдбрд╝рд╛ рд╣реИред
private static void InsertChildNoGrow(Symbol child) { .... while (sym?.nextSameName != null) { sym = sym.nextSameName; } Debug.Assert(sym != null && sym.nextSameName == null); sym.nextSameName = child; .... }
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :
V3042 рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 'рд╕рд┐рдореНрдмрд▓' рдСрдмреНрдЬреЗрдХреНрдЯ SymbolStore.cs 56 рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рджреЗрдЦрд┐рдпреЗ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЪреАрдЬрд╝ рд╣реИред рджреЛ рд╢рд░реНрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдорд┐рд▓рдиреЗ рдкрд░ рдЪрдХреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:
- sym == рдЕрд╢рдХреНрдд ;
- sym.nextSameName == рдЕрд╢рдХреНрдд ред
рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдиреАрдЪреЗ
рдиреЗрдХреНрд╕реНрдЯрдиреЗрдо рдирд╛рдо рдлреАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреЙрд▓ рд╣реИ рдФрд░, рдпрджрд┐
рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╢реВрдиреНрдп рд╣реИ ,
рддреЛ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди NullReferenceException рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
тАЬрдХреНрдпрд╛ рддреБрдо рдЕрдВрдзреЗ рд╣реЛ?
рдбреАрдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рднреА рд╣реИред
рдПрд╕рдПрд╕рдЯрд░ , рдЬрд╣рд╛рдВ рдпрд╣ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐
рд╕реАрдо! = рдирд▓ "- рдХрд┐рд╕реА рдХреЛ рдЖрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣ рд╕рдм рдирдордХ рд╣реИ! рдЬрдм
рдбреАрдмрдЧ рдХреЗ рд░рд┐рд▓реАрдЬ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВред рддреЛ
, рдХреБрдЫ рднреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде, рд╣рдо рд╕рднреА рдХреЛ рдПрдХ
NullReferenceException рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ -
рд░реЛрд╕реЗрд▓рд┐рди рдХреА рдПрдХ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рджреЗрдЦреА рдереА, рдЬрд╣рд╛рдВ
рдбреАрдмрдЧ.рдПрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдереАред рдЖрдкрдХреА рдЕрдиреБрдорддрд┐ рд╕реЗ рд░реЛрдЬрд▓рд┐рди рджреНрд╡рд╛рд░рд╛ рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд▓рд┐рддред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ
Microsoft.CodeAnalysis рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ Visual Studio рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Visual Studio рд╕рдВрд╕реНрдХрд░рдг 16.1.6 + рд╕рд┐рдВрдЯреИрдХреНрд╕ Visualizer 1.0 рдкрд░, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдкреБрди: рдЙрддреНрдкрдиреНрди рд╣реЛ рд░рд╣реА рд╣реИред
рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рдХреЛрдб рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
class C1<T1, T2> { void foo() { T1 val = default; if (val is null) { } } }
рдЕрдЧрд▓рд╛, рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ, рдЖрдкрдХреЛ
рдХреЙрдиреНрд╕рдЯреИрдВрдЯрдкреИрдВрдЯрд░реНрдирд╕рд┐рдиреНрдЯреЗрдХреНрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЯреНрд░реА рдХреЗ рдиреЛрдб рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреЛрдб рдореЗрдВ
рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░
рдЗрд╕рдХреЗ рд▓рд┐рдП
TypeSymbol рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред
рдЙрд╕рдХреЗ рдмрд╛рдж, Visual Studio рд░рд┐рдмреВрдЯ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдо рдИрд╡реЗрдВрдЯ рд╡реНрдпреВрдЕрд░ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реЗрдЧреА:
Application: devenv.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.Resources.MissingManifestResourceException at System.Resources.ManifestBasedResourceGroveler .HandleResourceStreamMissing(System.String) at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet( System.Globalization.CultureInfo, System.Collections.Generic.Dictionary'2 <System.String,System.Resources.ResourceSet>, Boolean, Boolean, System.Threading.StackCrawlMark ByRef) at System.Resources.ResourceManager.InternalGetResourceSet( System.Globalization.CultureInfo, Boolean, Boolean, System.Threading.StackCrawlMark ByRef) at System.Resources.ResourceManager.InternalGetResourceSet( System.Globalization.CultureInfo, Boolean, Boolean) at System.Resources.ResourceManager.GetString(System.String, System.Globalization.CultureInfo) at Roslyn.SyntaxVisualizer.DgmlHelper.My. Resources.Resources.get_SyntaxNodeLabel() ....
рдФрд░ devenv.exe рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
Faulting application name: devenv.exe, version: 16.1.29102.190, time stamp: 0x5d1c133b Faulting module name: KERNELBASE.dll, version: 10.0.18362.145, time stamp: 0xf5733ace Exception code: 0xe0434352 Fault offset: 0x001133d2 ....
рд░реЛрд╕рд▓рд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдбрд┐рдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЙрд╕ рд╕реНрдерд╛рди рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЕрдкрд╡рд╛рдж рд╣реБрдЖ:
private Conversion ClassifyImplicitBuiltInConversionSlow( TypeSymbol source, TypeSymbol destination, ref HashSet<DiagnosticInfo> useSiteDiagnostics) { Debug.Assert((object)source != null); Debug.Assert((object)destination != null); if ( source.SpecialType == SpecialType.System_Void || destination.SpecialType == SpecialType.System_Void) { return Conversion.NoConversion; } .... }
рдпрд╣рд╛рдВ, .NET рдХреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреА рддрд░рд╣,
Debug.Assert рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЪреЗрдХ рднреА рд╣реИ, рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред
рдЕрдВрдХ 9рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд▓рд┐рдд - рдФрд░ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд╡рд╛рдкрд╕ .NET рдХреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдПред
System.IO.IsolatedStorage рдкреИрдХреЗрдЬ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рд╣реИрдВред
private bool ContainsUnknownFiles(string directory) { .... return (files.Length > 2 || ( (!IsIdFile(files[0]) && !IsInfoFile(files[0]))) || (files.Length == 2 && !IsIdFile(files[1]) && !IsInfoFile(files[1])) ); }
рдЪреЗрддрд╛рд╡рдиреА PVS-Studio :
V3088 рдХреЛрд╖реНрдардХ рджреНрд╡рд╛рд░рд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреЛ рдмрд╛рд░ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: ((рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐))ред рдХреЛрд╖реНрдардХ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ рдпрд╛ рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдореМрдЬреВрдж рд╣реИред IsolatedStorageFile.cs 839
рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдб рд╕реНрд╡рд░реВрдкрдг рднреНрд░рдорд┐рдд рд╣реИ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рдирд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдкрд╣рд▓реЗ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб || -
files.Length> 2 , рд╕рд╣реА рд╣реИ рдХрд┐ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реИред рдереЛрдбрд╝рд╛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрдиреЗ рдкрд░ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд╣реА рдСрдкрд░реЗрдВрдб
((! IsIdFile (рдлрд╛рдЗрд▓реЗрдВ [0]) &&! IsInfoFile (рдлрд╛рдЗрд▓реЗрдВ [0])) рд╣реИ ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдХреЛрдб рдмрд╣реБрдд рднреНрд░рд╛рдордХ рд╣реИред
рдЕрдВрдХ 10рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ 7.03 рдХреА рд░рд┐рд▓реАрдЬ рдореЗрдВ, рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо V3138 рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рд╛рдкрддрд╛
$ рдЪрд░рд┐рддреНрд░ рдХреЗ рдХрд╛рд░рдг, рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред
System.Net рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЗрд╕ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдорд┐рд▓реАрдВред
internal static void CacheCredential(SafeFreeCredentials newHandle) { try { .... } catch (Exception e) { if (!ExceptionCheck.IsFatal(e)) { NetEventSource.Fail(null, "Attempted to throw: {e}"); } } }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА :
V3138 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрддреА рд╣реИред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдИред SSPIHandleCache.cs 42
рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐
рдлреЗрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реНрдХ рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ
рдИ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓рд╛рдкрддрд╛
$ рдЪрд░рд┐рддреНрд░ рдХреЗ рдХрд╛рд░рдг, рдЕрдкрд╡рд╛рдж рдХрд╛ рдХреЛрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдВрдХ 11рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдПрдХ рдФрд░ рдорд╛рдорд▓реЗ рд╕реЗ рдорд┐рд▓рд╛ред
public static async Task<string> GetDigestTokenForCredential(....) { .... if (NetEventSource.IsEnabled) NetEventSource.Error(digestResponse, "Algorithm not supported: {algorithm}"); .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА :
V3138 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрддреА рд╣реИред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рдирд╣реЗрд▓реНрдкрд░
рд╕реНрдерд┐рддрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЗ рд╕рдорд╛рди рд╣реИ,
$ рдкреНрд░рддреАрдХ рдлрд┐рд░ рд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЧрд▓рдд рд▓рд╛рдЗрди
рддреНрд░реБрдЯрд┐ рд╡рд┐рдзрд┐ рдкрд░ рдЬрд╛рддреА рд╣реИред
рдЕрдВрдХ 12рдкреИрдХреЗрдЬ
System.Net.Mail ред рд╡рд┐рдзрд┐ рдЫреЛрдЯрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдКрдВрдЧрд╛ рддрд╛рдХрд┐ рддреНрд░реБрдЯрд┐ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рд╣реЛред
internal void SetContent(Stream stream) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (_streamSet) { _stream.Close(); _stream = null; _streamSet = false; } _stream = stream; _streamSet = true; _streamUsedOnce = false; TransferEncoding = TransferEncoding.Base64; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА :
V3008 '_streamSet' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 123, 119. MimePart.cs 123
рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рджреЛрд╣рд░рд╛ рдХрд╛рдо
_streamSet рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ (рдкрд╣рд▓реЗ - рд╢рд░реНрдд рдХреЗ рддрд╣рдд; рдлрд┐рд░ - рдмрд╛рд╣рд░)ред рд╡рд╣реА рдХрд╣рд╛рдиреА рдЬреЛ
_stream рдХреЛ
рд╢реВрдиреНрдп рдХрд░рддреА рд╣реИред рдирддреАрдЬрддрди,
_stream рдЕрднреА рднреА
рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░
_stream рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рд╣реЛрдЧрд╛ред
рдЕрдВрдХ 13System.Linq.Expressions рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЬрдЧрд╣, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рддреБрд░рдВрдд 2 рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдмрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд╡рд┐рдзрд┐ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ ...
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :
- V3010 рдлрд╝рдВрдХреНрд╢рди ' GetType ' рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдирд┐рд░реНрджреЗрд╢ .cs 36
- V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ ред рдирд┐рд░реАрдХреНрд╖рдг 'рдУ' рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдирд┐рд░реНрджреЗрд╢ .cs 36
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╢рд╛рдпрдж рдХреБрдЫ рдирд╣реАрдВ рд╣реИред
рдЕрдВрдХ 14рдЖрдЗрдП рдПрдХ рдФрд░ рдорд╛рдорд▓реЗ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо "рдмрд╛рд╣рд░ рд╕реЗ" рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЕрдВрджрд░ рджреЗрдЦреЗрдВрдЧреЗред рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
System.Configuration.ConfigurationManager рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдЙрд╕реА рдирд╛рдо рдХреЗ NuGet рдкреИрдХреЗрдЬ рдХреЛ рд▓реЗрдВред рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг 4.5.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╣рдо
System.Configuration.CommaDelimitedStringCollection рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЪрд▓реЛ рдХреБрдЫ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдЗрд╕рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ, рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб:
CommaDelimitedStringCollection collection = new CommaDelimitedStringCollection(); Console.WriteLine(collection.ToString().Length);
рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
ToString рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рджреЗрдЦреЗрдВ:
рд╕рд╛рдзрд╛рд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдХреБрдЫ рднреА рдирд╣реАрдВ - рд╡рд╕реНрддреБ рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрд╕ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рднреА docs.microsoft.com рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ - "
CommaDelimitedStringCollection.ToStest Method "ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рд╣реИред
рдареАрдХ рд╣реИ, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЪрд▓рд╛рдПрдВ, ii ...
рд╣рдореНрдо, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗред рдареАрдХ рд╣реИ, рдЪрд▓реЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред "рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ" рд╣рдо рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ :)ред рдХреЛрдб рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
CommaDelimitedStringCollection collection = new CommaDelimitedStringCollection(); collection.Add(String.Empty); Console.WriteLine(collection.ToString().Length);
рд╣рдо рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ ...
рдХреНрдпрд╛, рдлрд┐рд░ рд╕реЗ ?! рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЕрдВрдд рдореЗрдВ
CommaDelimitedStringCollection рд╡рд░реНрдЧ рдХреЗ
ToString рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдХреЛрдб рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
public override string ToString() { if (Count <= 0) return null; StringBuilder sb = new StringBuilder(); foreach (string str in this) { ThrowIfContainsDelimiter(str);
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :
- V3108 рдпрд╣ 'ToSting' (') рд╡рд┐рдзрд┐ рд╕реЗ' null 'рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред StringAttributeCollection.cs 57
- V3108 рдпрд╣ 'ToSting' (') рд╡рд┐рдзрд┐ рд╕реЗ' null 'рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред StringAttributeCollection.cs 71
рдпрд╣рд╛рдБ рд╣рдо 2 рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╡рд░реНрддрдорд╛рди
ToString рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ Microsoft рдиреЗ
рдЯреЙрд╕рд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╕рд▓рд╛рд╣ рджреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдлрд┐рд░ рд╕реЗ docs.microsoft.com рдХреА рдУрд░ рд░реБрдЦ рдХрд░рддреЗ рд╣реИрдВ - "
Object.ToString Method ":
рдЗрдирд╣реЗрд░рд┐рдЯрд░реНрд╕ рдХреЛ рдиреЛрдЯреНрд╕ .... ToString рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб () рд╡рд┐рдзрд┐ рдХреЛ рдЗрди рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:- ....
- рдЖрдкрдХрд╛ ToString () рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рдЦрд╛рд▓реА рдпрд╛ рдЕрд╢рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП ред
- ....
рджрд░рдЕрд╕рд▓, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рджреЛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЬреЛ рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдереЗ, рд╡рд┐рднрд┐рдиреНрди рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБрдУрдВ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ - рдХреНрд░рдорд╢рдГ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рдЬрд╣рд╛рдБ рд╡рд╛рдкрд╕реА рд╣реЛрддреА рд╣реИред рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛ рдЦреЛрджрдирд╛ред
рдкрд╣рд▓рд╛ рдорд╛рдорд▓рд╛ред
рдЧрдгрдирд╛ - рдмреЗрд╕ рдХреНрд▓рд╛рд╕
рд╕реНрдЯреНрд░рд┐рдВрдЧрд░рдХреНрд▓рд┐рдУрдирд┐рдпрди рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ред рдЪреВрдВрдХрд┐ рдХреЛрдИ рддрддреНрд╡ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ,
рдХрд╛рдЙрдВрдЯ == 0 , рд╢рд░реНрдд
рдХрд╛рдЙрдВрдЯ <= 0 рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИ,
рдЕрд╢рдХреНрдд рд▓реМрдЯ рдЖрдИ рд╣реИред
рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП
CommaDelimitedStringCollection.Add рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рд╛ред
public new void Add(string value) { ThrowIfReadOnly(); ThrowIfContainsDelimiter(value); _modified = true; base.Add(value.Trim()); }
рдереНрд░реЙрдЗрдлрд╝ рдореЗрдВ рдЬрд╛рдВрдЪ
... рд╡рд┐рдзрд┐ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ
рдкрд╛рд╕ рд╣реЛрддреА рд╣реИ рдФрд░ рдЖрдЗрдЯрдо рдХреЛ рдЖрдзрд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░,
рдЧрдгрдирд╛ рдХрд╛ рдорд╛рди 1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдо
ToString рдкрджреНрдзрддрд┐ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдорд╛рди
рдЧрдгрдирд╛ <= 0 рдЧрд▓рдд рд╣реИ , рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ 2 рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧрдмреБрд▓рд╕реНрдЯрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдоред рдирддреАрдЬрддрди, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐
рдПрд╕рдмреА рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ
рд▓рдВрдмрд╛рдИ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп, рдПрдХ рд╣реИред рд╡реНрдпрдВрдЬрдХ
sb.Length> 0 рдХрд╛ рдорд╛рди
рд╕рддреНрдп рд╣реИ , рдШрдЯрд╛рд╡ рдФрд░
sb.Length рдХрд╛ рд▓реЗрдЦрди
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЕрдм
sb.Length рдХрд╛ рдорд╛рди 0. рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдлрд┐рд░ рд╕реЗ
рдЕрд╢рдХреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдЕрдВрдХ 15рдХрд╛рдлреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ
System.Configuration.ConfigurationProperty рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╕рдмрд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд▓реЗрдВ:
public ConfigurationProperty( string name, Type type, object defaultValue, TypeConverter typeConverter, ConfigurationValidatorBase validator, ConfigurationPropertyOptions options, string description);
рдЖрдЗрдП рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВ:
Docs.microsoft.com рдкрд░ рдирд┐рд░реНрдорд╛рддрд╛ рд╡рд░реНрдгрди рдПрдХ рд╣реА рдмрд╛рдд рдХрд╣рддрд╛ рд╣реИред рдЦреИрд░, рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдмреЙрдбреА рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
public ConfigurationProperty(...., string description) { ConstructorInit(name, type, options, validator, typeConverter); SetDefaultValue(defaultValue); }
рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :
V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'рд╡рд┐рд╡рд░рдг' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ConfigurationProperty.cs 62
рд╡реЗ рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЕрдВрдХ 16рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рджреВрд╕рд░реА рдЬрдЧрд╣ рд╕реЗ рдорд┐рд▓рд╛ред рд╕реНрд╡рдпрдВ рддреНрд░реБрдЯрд┐ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХрд╛ рдХреЛрдб рдиреАрдЪреЗ рд╣реИред
internal SectionXmlInfo( string configKey, string definitionConfigPath, string targetConfigPath, string subPath, string filename, int lineNumber, object streamVersion, string rawXml, string configSource, string configSourceStreamName, object configSourceStreamVersion, string protectionProviderName, OverrideModeSetting overrideMode, bool skipInChildApps) { ConfigKey = configKey; DefinitionConfigPath = definitionConfigPath; TargetConfigPath = targetConfigPath; SubPath = subPath; Filename = filename; LineNumber = lineNumber; StreamVersion = streamVersion; RawXml = rawXml; ConfigSource = configSource; ConfigSourceStreamName = configSourceStreamName; ProtectionProviderName = protectionProviderName; OverrideModeSetting = overrideMode; SkipInChildApps = skipInChildApps; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'configSourceStreamVersion' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред SectionXmlInfo.cs 16рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ: internal object ConfigSourceStreamVersion { set { } }
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЛрдб рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ / рд╕рдВрдкрддреНрддрд┐ рдЫреЛрдбрд╝ рджреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдпреЗ рд╕рд┐рд░реНрдл рдореЗрд░реЗ рдЕрдиреБрдорд╛рди рд╣реИрдВредрдЕрдВрдХ 17рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ System.Runtime.WindowsRuntime.UI.Xaml рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдЙрд╕реА рдирд╛рдо рдХреЗ NuGet рдкреИрдХреЗрдЬ рдХреЗ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдпрд╛ рдЧрдпрд╛ ред public struct RepeatBehavior : IFormattable { .... public override string ToString() { return InternalToString(null, null); } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3108 рдпрд╣ 'ToSting ()' рд╡рд┐рдзрд┐ рд╕реЗ 'null' рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред RepBehavior.cs 113рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдХрд╣рд╛рдиреА рдЬреЛ рдкрд╣рд▓реЗ рд╣реА рдЧреБрдЬрд░ рдЪреБрдХреА рд╣реИ - ToString рд╡рд┐рдзрд┐ рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреА рд╣реИ ред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ RepBehavior.ToString рд╣рдореЗрд╢рд╛ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ, рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЕрдкреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░, рдпрд╣ Microsoft рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рд╣реИредрдмреЗрд╢рдХ, рдХреЗрд╡рд▓ рдЗрд╕ рдкрджреНрдзрддрд┐ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ ToString рдЕрд╢рдХреНрдд рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреА рд╣реИ - рдЖрдкрдХреЛ рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдФрд░ рдЖрдВрддрд░рд┐рдХрдЯреНрд░реЛрд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред internal string InternalToString(string format, IFormatProvider formatProvider) { switch (_Type) { case RepeatBehaviorType.Forever: return "Forever"; case RepeatBehaviorType.Count: StringBuilder sb = new StringBuilder(); sb.AppendFormat( formatProvider, "{0:" + format + "}x", _Count); return sb.ToString(); case RepeatBehaviorType.Duration: return _Duration.ToString(); default: return null; } }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдЕрдЧрд░ рд╕реНрд╡рд┐рдЪ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рд╛рдЦрд╛, InternalToString рд╡рд╛рдкрд╕реА рдорд╛рди рд░рд┐рдХреНрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЕрд╢рдХреНрдд рд╡рд╛рдкрд╕реА рдФрд░ ToString редрд░рд┐рдкреАрдЯрдмрд┐рд╣рд╛рд░ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдФрд░ ToString рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреАрдЯрдмрд╛рдЗрд╡рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ , рдЙрд╕ рдкрд░ ToString рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ , рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ _Type рдХреЛ RepBehaviorType.Forever , рджреЛрд╣рд░рд╛рдПрдБBehaviorType.Count рдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредрдмрд╛рд░-рдмрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВ ред_рдкреНрд░рднреБ рдПрдХ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: public struct RepeatBehavior : IFormattable { .... private RepeatBehaviorType _Type; .... public RepeatBehaviorType Type { get { return _Type; } set { _Type = value; } } .... }
рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЖрдЧреЗ рдмрдврд╝реЛ рдФрд░ рджреЗрдЦреЛ рдХрд┐ RepBehaviorType рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ ред public enum RepeatBehaviorType { Count, Duration, Forever }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, repeatBehaviorType рддреАрдиреЛрдВ рддрддреНрд╡реЛрдВ рд╕реЗ рдпреБрдХреНрдд рдПрдХ рдЧрдгрдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рддреАрдиреЛрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реНрд╡рд┐рдЪ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рд╛рдЦрд╛ рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИредрд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, System.Runtime.WindowsRuntime.UI.Xaml рдкреИрдХреЗрдЬ (рдореИрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 4.3.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛) рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред RepeatBehavior behavior = new RepeatBehavior() { Type = (RepeatBehaviorType)666 }; Console.WriteLine(behavior.ToString() is null);
рд╕рд╛рдВрддреНрд╡рдирд╛ рдХрд╛рдлреА рдЙрдореНрдореАрдж рд╣реИ рдЙрддреНрдкрд╛рджрди рд╕рдЪ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ ToString рд▓реМрдЯреЗ рдЕрд╢рдХреНрдд , рдХреНрдпреЛрдВрдХрд┐ _рдкреНрд░рдХрд╛рд░ рдорд╛рдорд▓реЗ рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдорд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рдерд╛ , рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рд╛рдЦрд╛ рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВредрдореИрдВ рдпрд╣ рднреА рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА, рдФрд░ рди рд╣реА рдкрд░ docs.microsoft.com рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рд╡рд┐рдзрд┐ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВ рдЕрд╢рдХреНрдд редрд╕рдорд╕реНрдпрд╛ 18рдЕрдЧрд▓рд╛, рд╣рдо System.PStreet.DataContractSerialization рд╕реЗ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ ред private static class CharType { public const byte None = 0x00; public const byte FirstName = 0x01; public const byte Name = 0x02; public const byte Whitespace = 0x04; public const byte Text = 0x08; public const byte AttributeText = 0x10; public const byte SpecialWhitespace = 0x20; public const byte Comment = 0x40; } private static byte[] s_charType = new byte[256] { .... CharType.None, CharType.None| CharType.Comment| CharType.Comment| CharType.Whitespace| CharType.Text| CharType.SpecialWhitespace, CharType.None| CharType.Comment| CharType.Comment| CharType.Whitespace| CharType.Text| CharType.SpecialWhitespace, CharType.None, CharType.None, CharType.None| CharType.Comment| CharType.Comment| CharType.Whitespace, CharType.None, .... };
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :- V3001 There are identical sub-expressions 'CharType.Comment' to the left and to the right of the '|' рдСрдкрд░реЗрдЯрд░ред XmlUTF8TextReader.cs 56
- V3001 There are identical sub-expressions 'CharType.Comment' to the left and to the right of the '|' рдСрдкрд░реЗрдЯрд░ред XmlUTF8TextReader.cs 58
- V3001 There are identical sub-expressions 'CharType.Comment' to the left and to the right of the '|' рдСрдкрд░реЗрдЯрд░ред XmlUTF8TextReader.cs 64
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдкрд╛рдпрд╛ рдХрд┐ CharType.Comment рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ CharType.Comment ред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ (CharType.Comment | CharType.Comment) == CharType.Comment ред рд╕рд░рдгреА рдХреЗ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдЬреЛ CharType.Comment рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рдРрд╕рд╛ рдХреЛрдИ рджреЛрд╣рд░рд╛рд╡ рдирд╣реАрдВ рд╣реИредрдЕрдВрдХ 19рдЬрд╛рд░реА рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ XmlBinaryWriterSession.TryAdd рдкрджреНрдзрддрд┐ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдФрд░ docs.microsoft.com рдкрд░ рджрд┐рдП рдЧрдП рдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦреЗрдВ - " XmlBinaryWriterSession.TryAdd (Xml retardString, Int32) рд╡рд┐рдзрд┐ ": рд░рд┐рдЯрд░реНрди: рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдЕрдиреНрдпрдерд╛, рдЕрд╕рддреНрдпредрдЕрдм рдЖрдЗрдП рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рджреЗрдЦреЗрдВ: public virtual bool TryAdd(XmlDictionaryString value, out int key) { IntArray keys; if (value == null) throw System.Runtime .Serialization .DiagnosticUtility .ExceptionUtility .ThrowHelperArgumentNull(nameof(value)); if (_maps.TryGetValue(value.Dictionary, out keys)) { key = (keys[value.Key] - 1); if (key != -1) {
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3009 рдпрд╣ рд╡рд┐рдЪрд┐рддреНрд░ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ 'рд╕рдорд╛рди' рдХрд╛ рд╕рд╣реА рдорд╛рди рджреЗрддреА рд╣реИред XmlBinaryWriterSession.cs 29рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдпрд╛ рддреЛ рд╕рд╣реА рд╣реИ рдпрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА рднреА рдЧрд▓рдд рдирд╣реАрдВ рд▓реМрдЯрддреА рд╣реИ редрд╕рдорд╕реНрдпрд╛ 20 рдореИрдВрдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд▓реЗ рдХреЛрдб рд╕реЗ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ - рдпрд╣ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ : internal virtual bool OnHandleReference(....) { if (xmlWriter.depth < depthToCheckCyclicReference) return false; if (canContainCyclicReference) { if (_byValObjectsInScope.Contains(obj)) throw ....; _byValObjectsInScope.Push(obj); } return false; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3009 рдпрд╣ рд╡рд┐рдЪрд┐рддреНрд░ рд╣реИ рдХрд┐ рдпрд╣ рдкрджреНрдзрддрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ 'рд╕рдорд╛рди' рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред XmlObjectSerializerWriteContext.cs 415рддреЛ, рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд▓рдВрдмрд╛ рд╕рдлрд░ рддрдп рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ! рдЗрд╕рд▓рд┐рдП, рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдПрдХ рдЫреЛрдЯрд╛ рдмреНрд░реЗрдХ рд▓реЗрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ - рдЕрдкрдиреА рдорд╛рдВрд╕рдкреЗрд╢рд┐рдпреЛрдВ рдХреЛ рдлреИрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдереЛрдбрд╝рд╛ рд╕рд╛ рдЪрд▓реЗрдВ, рдЕрдкрдиреА рдЖрдВрдЦреЛрдВ рдХреЛ рдЖрд░рд╛рдо рджреЗрдВ, рдЦрд┐рдбрд╝рдХреА рд╕реЗ рдмрд╛рд╣рд░ рджреЗрдЦреЗрдВ ...рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдк рдлрд┐рд░ рд╕реЗ рдКрд░реНрдЬрд╛ рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВ, рддреЛ рдЪрд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред :)
рд╕рдорд╕реНрдпрд╛ 21 System.Security.Cryptography.AlgorithmsрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ ред public override byte[] GenerateMask(byte[] rgbSeed, int cbReturn) { using (HashAlgorithm hasher = (HashAlgorithm)CryptoConfig.CreateFromName(_hashNameValue)) { byte[] rgbCounter = new byte[4]; byte[] rgbT = new byte[cbReturn]; uint counter = 0; for (int ib = 0; ib < rgbT.Length;) {
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3080 рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рд╛рдВрддрд┐ ред 'рд╣реИрд╢рд░' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред PKCS1MaskGenerationMethod.cs 37рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЪреЗрддрд╛рд╡рдиреА рджреА рд╣реИ рдХрд┐ рдЬрдм hasher.TransformBlock рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рддреЛ рд╣реИрд╢ рдЪрд░ рдХрд╛ рдорд╛рди рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ , рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ NullReferenceException рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд░реБрд░рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдзрдиреНрдпрд╡рд╛рдж рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддреЛ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореЗрдВ рдХрд╝рдореА рдмрдирд╛рдиреЗ рдХреА рдорд╢реАрди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рдЕрд╢рдХреНрдд , рдЖрдк рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЙрддрд░рдирд╛ рдЪрд╛рд╣рд┐рдП CreateFromName ред public static object CreateFromName(string name) { return CreateFromName(name, null); }
рдЕрдм рддрдХ, рдХреБрдЫ рднреА рдирд╣реАрдВ - рд╣рдо рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛рддреЗ рд╣реИрдВред рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде CreateFromName рдХреЗ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╢рд░реАрд░ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рддрд╛ рд╣реВрдВред public static object CreateFromName(string name, params object[] args) { .... if (retvalType == null) { return null; } .... if (cons == null) { return null; } .... if (candidates.Count == 0) { return null; } .... if (rci == null || typeof(Delegate).IsAssignableFrom(rci.DeclaringType)) { return null; } .... return retval; }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рдзрд┐ рдореЗрдВ рдХрдИ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд╣рд╛рдВ рдирд▓ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдкрд╣рд▓реЗ рдмрддрд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐, рдЬрд┐рд╕рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЧрдИ рдереА, рдореЗрдВ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ редрд╕рд┐рджреНрдзрд╛рдВрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓реЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореВрд▓ рд╡рд┐рдзрд┐ рдкрд░ рдПрдХ рдФрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рд╡рд┐рдзрд┐ рд╕реЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб reducible рд╣реИред public class PKCS1MaskGenerationMethod : ....
рдЖрдЗрдП рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:1, 3 ред рдХреНрд▓рд╛рд╕ рдФрд░ рдореЗрдердб рдореЗрдВ рдкрдмреНрд▓рд┐рдХ рдПрдХреНрд╕реЗрд╕ рдореЛрдбрд┐рдлрд╛рдпрд░реНрд╕ рд╣реИрдВ ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдЙрдкрд▓рдмреНрдз рд╣реИ - рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредреи ред рдПрдХ рд╡рд░реНрдЧ - рдЧреИрд░-рд╕рд╛рд░ рдЙрджрд╛рд╣рд░рдг, рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИ - рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдЬрд╛рдВрдЪ рдХреА, рдХрдХреНрд╖рд╛рдПрдВ рдЕрдореВрд░реНрдд рдереАрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЕрднреА рднреА рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдереАредрек ред CreateFromName рдХреЛ рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдХреЛ рдирд╣реАрдВ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрд╢рдХреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ, рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗредрел, рем ред CbReturn рдХрд╛ рдорд╛рдирд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП> 0 (рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рдлрд▓ рд╕рд░рдгреА рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реАрдорд╛ рдХреЗ рднреАрддрд░)ред рд╕реНрдерд┐рддрд┐ cbReturn рдХреА рдкреВрд░реНрддрд┐ > 0 рдЖрдЧреЗ рдХреА рд╕реНрдерд┐рддрд┐ ib <rgbT.Length рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдФрд░ рд▓реВрдк рдмреЙрдбреА рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ ред7 ред Helpres.ConvertIntToByteArray рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредрдЙрди рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╕ рдкрд░реНрдпрд╛рдкреНрдд рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:- rgbCeed - рдирдИ рдмрд╛рдЗрдЯ [] {0, 1, 2, 3};
- cbReturn - 42ред
CryptoConfig.CreateFromName рд╡рд┐рдзрд┐ рдХреЛ "рд╕рдордЭреМрддрд╛" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдкрдХреЛ _haNameValue рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдпрд╣ рдореМрдЬреВрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдЖрд╡рд░рдг рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: public string HashName { get { return _hashNameValue; } set { _hashNameValue = value ?? DefaultHash; } }
HashName (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, _hashNameValue ) рдХреЗ рд▓рд┐рдП 'рд╕рд┐рдВрдереЗрдЯрд┐рдХ' рдорд╛рди рд╕реЗрдЯ рдХрд░рдХреЗ , рдЖрдк рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдЧрдП рд░рд┐рдЯрд░реНрди рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ CreateFromName рд╡рд┐рдзрд┐ рд╕реЗ рд╢реВрдиреНрдп рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдореИрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВрдЧреЗ), рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИред рдирддреАрдЬрддрди, рдХреЛрдб рдЬреЛ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛, рд╡рд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ: PKCS1MaskGenerationMethod tempObj = new PKCS1MaskGenerationMethod(); tempObj.HashName = "Dummy"; tempObj.GenerateMask(new byte[] { 1, 2, 3 }, 42);
рд╣рдо рдбреАрдмрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ NuGet рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг 4.3.1 рдкрд░ рд╕рдорд╛рди рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛редрдЙрддреНрдкрдиреНрди рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА, рд╡рд┐рдзрд┐ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз, рдпрд╣ docs.microsoft.com рдкрд░ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИ - " PKCS1MaskGenerationMethod.GenerateMask (рдмрд╛рдЗрдЯ [], Int32, рд╡рд┐рдзрд┐ " ) редрд╡реИрд╕реЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкреНрд▓реЗрдмреИрдХ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд╡рд░реНрдгрди рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдЗрд╕ рддрд░реАрдХреЗ рдХреЛ "рддреЛрдбрд╝рдиреЗ" рдХреЗ рд▓рд┐рдП 2 рдФрд░ рддрд░реАрдХреЗ рдорд┐рд▓реЗ:- cbReturn рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдорд╛рди рдкрд╛рд╕ рдХрд░реЗрдВ ;
- рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд rgbSeed рдореВрд▓реНрдп рдЕрд╢рдХреНрдд ред
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ OutOfMemoryException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рддрд╛ рд╣реИ редрджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ rgbSeed.Length рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рддрд╛ рд╣реИ ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣реИрд╢рд░ рдХрд╛ рдПрдХ рдиреЙрдирдЬреЗрд░реЛ рд╡реИрд▓реНрдпреВ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдзрд╛рдЧрд╛ rgbSeed.Length рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗрдЧрд╛ ред рдЕрдВрдХ 22 рдХреБрдЫ рдФрд░ рд╕рдорд╛рди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдорд┐рд▓рддреЗ рд╣реИрдВред public class SignatureDescription { .... public string FormatterAlgorithm { get; set; } public string DeformatterAlgorithm { get; set; } public SignatureDescription() { } .... public virtual AsymmetricSignatureDeformatter CreateDeformatter( AsymmetricAlgorithm key) { AsymmetricSignatureDeformatter item = (AsymmetricSignatureDeformatter) CryptoConfig.CreateFromName(DeformatterAlgorithm); item.SetKey(key);
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :- V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ ред 'рдЖрдЗрдЯрдо' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред SignatureDescription.cs 31
- V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ ред 'рдЖрдЗрдЯрдо' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред SignatureDescription.cs 38
рдлрд┐рд░, рд╣рдо FormatterAl рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ DeformatterAl рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП CryptoConfig.CreateFromName рд╡рд┐рдзрд┐ CreateDeformatter рдФрд░ CreateFormorm рдкрджреНрдзрддрд┐рдпреЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рджреЗрддрд╛ рд╣реИ ред рдЕрдЧрд▓рд╛, рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдореЗрдердб SetKey рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп , рдПрдХ NullReferenceException рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рд╕рдорд╕реНрдпрд╛, рдлрд┐рд░ рд╕реЗ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХреА рдЬрд╛рддреА рд╣реИ: SignatureDescription signature = new SignatureDescription() { DeformatterAlgorithm = "Dummy", FormatterAlgorithm = "Dummy" }; signature.CreateDeformatter(null);
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, CreateDeformatter рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп , рдФрд░ CreateFormatter рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп , NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ редрдЕрдВрдХ 23 рд╕рд┐рд╕реНрдЯрдордкрд╛рд░реНрдЯреА.рдПрдХреНрд╕рдПрд▓рдПрдордПрд▓рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ ред public override void WriteBase64(byte[] buffer, int index, int count) { if (!_inAttr && (_inCDataSection || StartCDataSection())) _wrapped.WriteBase64(buffer, index, count); else _wrapped.WriteBase64(buffer, index, count); }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред QueryOutputWriterV1.cs 242рджрд┐рдЦрддрд╛ рд╣реИ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рддрдм рдФрд░ рдмрд╛рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдСрдкрд░реЗрдЯрд░ рдЕрдЧрд░ рдПрдХ рд╣реА рдХреЛрдб рд╣реЛрддрд╛ рд╣реИред рдпрд╛ рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ рдФрд░ рдПрдХ рд╢рд╛рдЦрд╛ рдореЗрдВ рдПрдХ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдереА, рдпрд╛ рдпрджрд┐ рдХрдерди рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдЕрдВрдХ 24 internal void Depends(XmlSchemaObject item, ArrayList refs) { .... if (content is XmlSchemaSimpleTypeRestriction) { baseType = ((XmlSchemaSimpleTypeRestriction)content).BaseType; baseName = ((XmlSchemaSimpleTypeRestriction)content).BaseTypeName; } else if (content is XmlSchemaSimpleTypeList) { .... } else if (content is XmlSchemaSimpleTypeRestriction) { baseName = ((XmlSchemaSimpleTypeRestriction)content).BaseTypeName; } else if (t == typeof(XmlSchemaSimpleTypeUnion)) { .... } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3003 'if (A) {...} рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЧрд░ (A) {...}' рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреНрд╕: 381, 396. ImportContext.cs 381 if-else-ifрдЕрдиреБрдХреНрд░рдо рдореЗрдВ рджреЛ рд╕рдорд╛рди рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ - рд╕рд╛рдордЧреНрд░реА XmlSchemaSimpleTypeRestriction рд╣реИ ред рдХреНрдпрд╛ рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ - рд╢рд░реАрд░ рддреЛ -branches рдХреА рдЗрд╕реА рдСрдкрд░реЗрдЯрд░реЛрдВ рднрд╛рд╡ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рддрд░реАрдХрд╛ рдпрд╛ рджреВрд╕рд░рд╛, рдпрд╛ рддреЛ рдкрд╣рд▓реЗ рд╕рдВрдЧрдд рддрдм рдХреЗ рд╢рд░реАрд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрджрд┐ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рдЪ рд╣реИ), рдпрд╛ рди рд╣реА рдПрдХ рдФрд░ рди рд╣реА рдЕрдЧрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЭреВрдареА рд╣реИред рдЕрдВрдХ 25рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдореЗрдВ рддреНрд░реБрдЯрд┐ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрд╕рдХрд╛ рдкреВрд░рд╛ рд╢рд░реАрд░ рд▓рд╛рддреА рд╣реВрдВред public bool MatchesXmlType(IList<XPathItem> seq, int indexType) { XmlQueryType typBase = GetXmlType(indexType); XmlQueryCardinality card; switch (seq.Count) { case 0: card = XmlQueryCardinality.Zero; break; case 1: card = XmlQueryCardinality.One; break; default: card = XmlQueryCardinality.More; break; } if (!(card <= typBase.Cardinality)) return false; typBase = typBase.Prime; for (int i = 0; i < seq.Count; i++) { if (!CreateXmlType(seq[0]).IsSubtypeOf(typBase)) return false; } return true; }
рдпрджрд┐ рдЖрдкрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛, рддреЛ рдмрдзрд╛рдИ!рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА рдорджрдж рдХрд░реЗрдЧреА: рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ 'seq' рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрддреНрд╡ рддрдХ V3102 рд╕рдВрджрд┐рдЧреНрдз рдкрд╣реБрдВрдЪред XmlQueryRuntime.cs 738рдкреНрд░рджрд░реНрд╢рди рдПрдХ рдкрд╛рд╢ рдХреЗ рд▓рд┐рдП , рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдореИрдВ <seq.Count ред рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ seq рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ред рдХреЗрд╡рд▓ рд▓реВрдк рдореЗрдВ рд╡реЗ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ ( seq [i] ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реБрдП рдЕрдиреБрдХреНрд░рдо рдХреЗ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╢рд╛рдмреНрджрд┐рдХ - рд╢реВрдиреНрдп ( seq [0] ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВредрд╕рдорд╕реНрдпрд╛ 26рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ рдпрд╣ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред public override void WriteValue(string value) { WriteValue(value); }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3110 'WriteValue' рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрджрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ред XmlAttributeCache.cs 166рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╢рд░реНрдд рдХреЗ рдкреБрдирд░рд╛рд╡рд░реНрддрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИредрдЕрдВрдХ 27 public IList<XPathNavigator> DocOrderDistinct(IList<XPathNavigator> seq) { if (seq.Count <= 1) return seq; XmlQueryNodeSequence nodeSeq = (XmlQueryNodeSequence)seq; if (nodeSeq == null) nodeSeq = new XmlQueryNodeSequence(seq); return nodeSeq.DocOrderDistinct(_docOrderCmp); }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'seq' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 880, 884. XmlQueryRuntime.cs 880рд╡рд┐рдзрд┐ рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╢реВрдиреНрдп рдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ , рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдХрд╛рдЙрдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдиреАрдЪреЗ рд╣рдо seq рдХреА рд╕реНрдкрд╖реНрдЯ рдврд▓рд╛рдИ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдиреЛрдбрд╕реЗрдХ рдЪрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдХрд╛ рдореВрд▓реНрдп рддреЛ seq - рдЕрд╢рдХреНрдд , рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдПрдХ рдзрд╛рдЧрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреА рд╡рдЬрд╣ рд╕реЗ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЖрдПрдЧрд╛ред рдЕрдЧрд░ seq рдХрд╛ рдореВрд▓реНрдп рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ , рддреЛ:- рдпрджрд┐ рдЯрд╛рдЗрдк рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ InvalidCastException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ;
- рдпрджрд┐ рдХрд╛рд╕реНрдЯ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдиреЛрдбрд╕реНрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдореВрд▓реНрдп рд╣реИ ред
рдЕрдВрдХ 28рдореАрдЯрд░ 4 рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдЬрд┐рд╕рдореЗрдВ рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдереЗред рдЙрдиреНрд╣реЗрдВ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрди рдЕрдкреНрд░рдпреБрдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИредрдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :- V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'SecurityUrl' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред XmlSecureResolver.cs 15
- V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'strdata' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред XmlEntity.cs 18
- V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'рд╕реНрдерд╛рди' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдХрд▓рди .cs 58
- V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'рдПрдХреНрд╕реЗрд╕' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред XmlSerializationILGen.cs 38
рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдиреЗ рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдкреА рджреА (рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╡рд╣ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдХреА рд╕реВрдЪреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛)ред рдХреНрдпрд╛?
рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ред рд╢рд╛рдпрдж рдирд╛рдоред public XmlSecureResolver(XmlResolver resolver, string securityUrl) { _resolver = resolver; }
рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдпрд╛ рдХрд┐ рд╡реЗ docs.microsoft.com рдкрд░ рдХреНрдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ - " XmlSecureResolver Constructors " SecurityUrl рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ :URL рдЬреЛ PermissionSet рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд XmlResolver рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред XmlSecureResolver рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд XmlResolver рдкрд░ GetEntity (Uri, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЯрд╛рдЗрдк) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ PermitOnly () рдмрдирд╛рдП рдЧрдП PermissionSet рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИредрд╕рдорд╕реНрдпрд╛ 29 System.PStreet.UriрдкреИрдХреЗрдЬ рдореЗрдВ , рдореБрдЭреЗ рдПрдХ рд╡рд┐рдзрд┐ рдорд┐рд▓реА , рдЬреЛ рдХрд┐ Microsoft рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝реЗ рд╕рдВрдШрд░реНрд╖ рдореЗрдВ рдЖ рдЧрдИ рдереА, рддрд╛рдХрд┐ ToStiding рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ ред Object.ToString рд╡рд┐рдзрд┐ рдкреГрд╖реНрда рд╕реЗ рдпреБрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ : рдЖрдкрдХрд╛ ToString () рдУрд╡рд░рд░рд╛рдЗрдб рдЕрдкрд╡рд╛рдж рдХреЛ рдирд╣реАрдВ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП редрдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ: public override string ToString() { if (_username.Length == 0 && _password.Length > 0) { throw new UriFormatException(SR.net_uri_BadUserPassword); } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3108 'рдЕрдкрд╡рд╛рдж' () рд╡рд┐рдзрд┐ рд╕реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдирд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред UriBuilder.cs 406рдХреЛрдб рдЬреЛ _username рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ UserName рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ _password рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░- рд░рд┐рдХреНрдд рд▓рд╛рдЗрди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ , рдФрд░ рдлрд┐рд░ ToString рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ , рдПрдХ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдРрд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг: UriBuilder uriBuilder = new UriBuilder() { UserName = String.Empty, Password = "Dummy" }; String stringRepresentation = uriBuilder.ToString(); Console.WriteLine(stringRepresentation);
рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рд╡рд┐рдзрд┐ рдФрд░ рдбреЙрдХреНрд╕.рдорд╛рдЗрдХреЛрдорд┐рдХреНрд╕.рдХреЙрдо рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ - " UriBuilder.ToString рд╡рд┐рдзрд┐ "редрд╕рдорд╕реНрдпрд╛ 30 System.Data.CommonрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдкрд░ рдЬрд╛рд░реА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ ред private ArrayList _tables; private DataTable GetTable(string tableName, string ns) { .... if (_tables.Count == 0) return (DataTable)_tables[0]; .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3106 рд╕рдВрднрд╡рддрдГ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред '0' рдЗрдВрдбреЗрдХреНрд╕ '_tables' рдмрд╛рдЙрдВрдб рд╕реЗ рдкрд░реЗ рдЗрдВрдЧрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред XMLDiffLoader.cs 277 рдХреНрдпрд╛рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рджрд┐рдЦрддрд╛ рд╣реИ? рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдпрд╣ рдХреНрдпрд╛ рд╣реИ? рдлреИрдВрд╕реА рддрд░реАрдХрд╛ ArgumentOutOfRangeException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП ? рдореБрдЭреЗ рд╢рд╛рдпрдж рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЛрдб рдЕрдЬреАрдм рдФрд░ рд╕рдВрджрд┐рдЧреНрдз рд╣реИредрдЕрдВрдХ 31 internal XmlNodeOrder ComparePosition(XPathNodePointer other) { RealFoliate(); other.RealFoliate(); Debug.Assert(other != null); .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдЕрдиреНрдп' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: 1095, 1096. XPathNodePointer.cs 1095рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрдиреНрдп = рдЕрд╢рдХреНрдд! рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ Debug.Assert рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк ComparePosition рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрд╢рдХреНрдд ред рдХрдо рд╕реЗ рдХрдо, рд╡реЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЕрдиреНрдп рдХреЗ рдКрдкрд░ рдХреА рд░реЗрдЦрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдзрд┐ RealFoliate рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рдЕрдиреНрдп рдЕрд╢рдХреНрдд рд╣реИ , рддреЛ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛Assert рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдБрдЪ рд╕реЗ рдкрд╣рд▓реЗ редрдЕрдВрдХ 32 private PropertyDescriptorCollection GetProperties(Attribute[] attributes) { .... foreach (Attribute attribute in attributes) { Attribute attr = property.Attributes[attribute.GetType()]; if ( (attr == null && !attribute.IsDefaultAttribute()) || !attr.Match(attribute)) { match = false; break; } } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3080 рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рд╛рдВрддрд┐ ред 'рдЕрдЯрд░' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред DbConnectionStringBuilder.cs 534 рдпрджрд┐ рдХрдерди рдХреАрд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреБрдЫ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддреА рд╣реИред рдорд┐рд▓рд╛рди рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдзрд┐ рд╣реИред Attr == null рдХреА рдЬрд╛рдБрдЪ рдХрд░рдХреЗ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ , null рдЗрд╕ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдз (рдЕрдкреЗрдХреНрд╖рд┐рдд) рдорд╛рди рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдзрд╛рдЧрд╛ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ || рдмрд╢рд░реНрддреЗ рдХрд┐ attr - рдЕрд╢рдХреНрдд , рдПрдХ рдЕрдкрд╡рд╛рдж рдкреНрд░рдХрд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ рдПрдХ NullReferenceException ред рддрджрдиреБрд╕рд╛рд░, рдЕрдкрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:- attr тАФ null . &&.
- !attribute.IsDefaultAttribute() тАФ false . && тАФ false .
- || false , .
- attr тАФ null , Match .
Issue 33 private int ReadOldRowData( DataSet ds, ref DataTable table, ref int pos, XmlReader row) { .... if (table == null) { row.Skip();
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3021 рд╕рдорд╛рди рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ 'рдпрджрд┐' рдХрдерди рд╣реИрдВред рдкрд╣рд▓реЗ 'if' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдореЗрдердб рд░рд┐рдЯрд░реНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рджреВрд╕рд░рд╛ 'рдЕрдЧрд░' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗрдВрд╕рд▓реЗрд╕ рд╣реИ XMLDiffLoader.cs 301рджреЛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕рдорд╛рди рдХрдВрдбреАрд╢рдирд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди - рдЯреЗрдмрд▓ == null рд╣реИрдВ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ - рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдзрд┐ -1 рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреА рд╣реИ, рджреВрд╕рд░реЗ рдореЗрдВ, рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреЗрдХреЛрдВ рдХреЗ рдмреАрдЪ, рддрд╛рд▓рд┐рдХрд╛ рдЪрд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╢реНрди рдореЗрдВ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рдПрдЧрд╛редрд╕рдорд╕реНрдпрд╛ 34 System.ComponentModel.TypeConverterрдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдзрд┐ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:рд╕реНрд╡рд░реВрдкрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдЕрдВрддрд┐рдо рд╡рд░реНрдг рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИред (рд╡рд░реНрдЪреБрдЕрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд░реНрдг рдирд┐рдХрд╛рд▓реЗрдВ)ред рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдкрд░рдо рдореЗрдВ рд╡рд╣ рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рдСрдкрд░реЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╕реНрдерд┐рддрд┐ рдкрд░реАрдХреНрд╖рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИред MaskedTextResultHint out param рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИред рд╕рдлрд▓рддрд╛ рдкрд░ рд╕рдЪ рд▓реМрдЯрд╛рддрд╛ рд╣реИ , рдЕрдиреНрдпрдерд╛ рдЧрд▓рдд редрд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЦреНрдп рдмрд┐рдВрджреБ: рдпрджрд┐ рдСрдкрд░реЗрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рд╕рд╣реА рд╣реИ , рдЕрдиреНрдпрдерд╛ рдЧрд▓рдд рд╣реИ ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред public bool Remove(out int testPosition, out MaskedTextResultHint resultHint) { .... if (lastAssignedPos == INVALID_INDEX) { .... return true;
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3009 рдпрд╣ рд╡рд┐рдЪрд┐рддреНрд░ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ 'рд╕рдорд╛рди' рдХрд╛ рд╕рд╣реА рдорд╛рди рджреЗрддреА рд╣реИред MaskedTextProvider.cs 1529рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╕рдЪ рд╣реИ редрдЕрдВрдХ 35 public void Clear() { if (_table != null) { .... } if (_table.fInitInProgress && _delayLoadingConstraints != null) { .... } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3125 '_table' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЗрд╕реЗ null рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреНрд╕: 437, 423. ConstraintCollection.cs 437рдЪреЗрдХрд┐рдВрдЧ _table! = Null рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИ - _table рд╡реЗрд░рд┐рдПрдмрд▓ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреБрдирд░реНрдмреАрдорд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдиреАрдЪреЗ рд╡реЗ null - _table .fInitInProgress рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд┐рдП рдмрд┐рдирд╛ _table рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рд╕рдорд╕реНрдпрд╛ 36 рдЕрдм, рдЪрд▓реЛ System.Runtime.Serialization.Formatters рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рдкрд░ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ ред private void Write(....) { .... if (memberNameInfo != null) { .... _serWriter.WriteObjectEnd(memberNameInfo, typeNameInfo); } else if ((objectInfo._objectId == _topId) && (_topName != null)) { _serWriter.WriteObjectEnd(topNameInfo, typeNameInfo); .... } else if (!ReferenceEquals(objectInfo._objectType, Converter.s_typeofString)) { _serWriter.WriteObjectEnd(typeNameInfo, typeNameInfo); } }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3038 рддрд░реНрдХ рдХреЛ рдХрдИ рдмрд╛рд░ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдиреНрдп рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред BinaryObjectWriter.cs 262рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЕрдВрддрд┐рдо рдХреЙрд▓ рдХреЛ _serWriter.WriteObjectEnd рдореЗрдВ рджреЛ рд╕рдорд╛рди рддрд░реНрдХреЛрдВ - typeNameInfo рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ ред рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ WriteObjectEnd рд╡рд┐рдзрд┐ рд╣реИ ред internal void WriteObjectEnd(NameInfo memberNameInfo, NameInfo typeNameInfo) { }
рдЦреИрд░ ... рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред :)
рдЕрдВрдХ 37 internal void WriteSerializationHeader( int topId, int headerId, int minorVersion, int majorVersion) { var record = new SerializationHeaderRecord( BinaryHeaderEnum.SerializedStreamHeader, topId, headerId, minorVersion, majorVersion); record.Write(this); }
рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдкрдиреЗ рддреБрд░рдВрдд рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдБ рдЧрд▓рдд рд╣реИ рдпрд╛ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕рддрд░реНрдХ рдХрд┐рдпрд╛редрдЪреЗрддрд╛рд╡рдиреА PVS-Studio : V3066 рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдХреНрд░рдо 'SerializationHeaderRecord' рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░: 'minorVersion' рдФрд░ 'majorVersion' рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ред BinaryFormatterWriter.cs 111рдЪрд▓реЛ SerializationHeaderRecord рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ ред internal SerializationHeaderRecord( BinaryHeaderEnum binaryHeaderEnum, int topId, int headerId, int majorVersion, int minorVersion) { _binaryHeaderEnum = binaryHeaderEnum; _topId = topId; _headerId = headerId; _majorVersion = majorVersion; _minorVersion = minorVersion; }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдСрд░реНрдбрд░ рдореЗрдЬрд░рд╡реЗрд╢рди , рдорд╛рдЗрдиреЙрд░рд╡реЗрд╢рди рдореЗрдВ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ ; рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдЙрдиреНрд╣реЗрдВ рдСрд░реНрдбрд░ рдорд╛рдЗрдирд░рд╡рд░реНрдЬрди , рдореЗрдЬрд░рд╡реЛрд░реЗрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдПрдХ рдЯрд╛рдЗрдкреЛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА (рдФрд░ рдЕрдЪрд╛рдирдХ?) - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПредрдЕрдВрдХ 38 internal ObjectManager( ISurrogateSelector selector, StreamingContext context, bool checkSecurity, bool isCrossAppDomain) { _objects = new ObjectHolder[DefaultInitialSize]; _selector = selector; _context = context; _isCrossAppDomain = isCrossAppDomain; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'checkSecurity' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ObjectManager.cs 33 CheckSecurity рдХрд╛рдирд┐рд░реНрдорд╛рддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕ рдкрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИред рдореИрдВ рдорд╛рдиреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЕрдВрдХ 39 рдПрдХ рдФрд░ рдХреЛрдб рдЖрдпрд╛ рдЬреЛ рдореБрдЭреЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧрд╛ред рдкреИрдЯрд░реНрди рд╕рднреА рддреАрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ 1 рдореЗрдВ 1 рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рд╕рдорд╛рди рдирд╛рдореЛрдВ рдФрд░ рдЪрд░ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рддрд░реАрдХреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП:- рдпрд╛ рддреЛ рдореИрдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкреНрд░рдмреБрджреНрдз рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдХрд╛ рдЕрд░реНрде рдирд╣реАрдВ рд╕рдордЭрд╛;
- рдпрд╛ рддреЛ рддреНрд░реБрдЯрд┐ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдХреЛрдб рд╣реА: private void EnlargeArray() { int newLength = _values.Length * 2; if (newLength < 0) { if (newLength == int.MaxValue) { throw new SerializationException(SR.Serialization_TooManyElements); } newLength = int.MaxValue; } FixupHolder[] temp = new FixupHolder[newLength]; Array.Copy(_values, 0, temp, 0, _count); _values = temp; }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :- V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'newLength == int.MaxValue' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реИред ObjectManager.cs 1423
- V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'newLength == int.MaxValue' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реИред ObjectManager.cs 1511
- V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'newLength == int.MaxValue' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реИред ObjectManager.cs 1558
рд╕рднреА рдЬреЛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реИрдВ, рдЕрд╕реНрдерд╛рдпреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрддреНрд╡ рдкреНрд░рдХрд╛рд░ рд╣реИ ( рдлрд╝рд┐рдХреНрд╕рдЕрдкрд╣реЛрд▓реНрдбрд░ рдирд╣реАрдВ рд╣реИ , рд▓реЗрдХрд┐рди рд▓рдВрдмреА рдпрд╛ рд╡рд╕реНрддреБ )ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрднреА рднреА рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИ ... System.Data.Odbc рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрд╕рдорд╕реНрдпрд╛ 40рдХреЛрдб ред public string UnquoteIdentifier(....) { .... if (!string.IsNullOrEmpty(quotePrefix) || quotePrefix != " ") { .... } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3022 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди '! String.IsNullOrEmpty (quotPrefix) || quotPrefix! = "" "рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИред OdbcCommandBuilder.cs 338рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реИ ред рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИред рдФрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕ рдореВрд▓реНрдп рдХреА рдмреЛрд▓реА рдЙрдкрд╕рд░реНрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ - рд╕реНрдерд┐рддрд┐ рд╕реНрд╡рдпрдВ рдЧрд▓рдд рд▓рд┐рдЦреА рдЧрдИ рд╣реИред рдЪрд▓реЛ рдареАрдХ рд╣реИредрд╣рдорд╛рд░реЗ рдкрд╛рд╕ || рдСрдкрд░реЗрдЯрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ (рдпрд╛ рджреЛрдиреЛрдВ) рдСрдкрд░реЗрдВрдб рд╕рддреНрдп рд╣реИ, рддреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рд╕рд╣реА рд╣реЛрдЧрд╛ ред рдмрд╛рдИрдВ рдУрд░ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╕рд╣реА рдСрдкрд░реЗрдВрдб рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗрд╡рд▓ рддрднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд▓реЗрдлреНрдЯ рдСрдкрд░реЗрдВрдб рдЭреВрдард╛ рд╣реЛред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд░рдЪрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рд╕рд╣реА рдСрдкрд░реЗрдВрдб рдХрд╛ рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛ , рдЬрдм рдмрд╛рдИрдВ рдУрд░ рдХрд╛ рдорд╛рди рдЧрд▓рдд рд╣реЛ , рддреЛ рдкреВрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓рдЧрд╛рддрд╛рд░ рд╕рдЪ рд╣реЛрдЧрд╛ редрдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕реЗ, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╕рд╣реА рдСрдкрд░реЗрдВрдб рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдорд╛рдиред NNOOOEmpty (quotPrefix) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рд╣реА рд╣реИ , рдЗрд╕рд▓рд┐рдП, рдХрдердиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рддреНрдп рд╣реИ :- quotPrefix == null ;
- quotPrefix.Length == 0 ред
рдпрджрд┐ рдЗрди рдХрдердиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╕рддреНрдп рд╣реИ, рддреЛ рднрд╛рд╡ рдЙрджреНрдзрд░рдгрдкреНрд░рд╕реНрддреБрдд! = "" рднреА рд╕рддреНрдп рд╣реЛрдЧрд╛ , рдЬрд┐рд╕реЗ рд╣рдо рд╕рд┐рджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдЗрд╕рд▓рд┐рдП, рд╕рдВрдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛрддрд╛ рд╣реИ , рднрд▓реЗ рд╣реА рдмреЛрд▓реАрдкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реЛ редрд╕рдорд╕реНрдпрд╛ 41рдЕрдкреНрд░рдпреБрдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рддрдЪреАрдд рдкрд░ рд▓реМрдЯрдирд╛: private sealed class PendingGetConnection { public PendingGetConnection( long dueTime, DbConnection owner, TaskCompletionSource<DbConnectionInternal> completion, DbConnectionOptions userOptions) { DueTime = dueTime; Owner = owner; Completion = completion; } public long DueTime { get; private set; } public DbConnection Owner { get; private set; } public TaskCompletionSource<DbConnectionInternal> Completion { get; private set; } public DbConnectionOptions UserOptions { get; private set; } }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'userOptions' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред DbConnectionPool.cs 26рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛрдб рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рдХрд▓реНрдк , рдЬрдмрдХрд┐ рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕реА рдирд╛рдо рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЧреБрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рднреВрд▓ рдЧрдПредрд╕рдорд╕реНрдпрд╛ 42рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ 2 рдмрд╛рд░ рдорд┐рд▓реЗ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдб рд╣реИред рдкреИрдЯрд░реНрди рдПрдХ рд╣реА рд╣реИред private DataTable ExecuteCommand(....) { .... foreach (DataRow row in schemaTable.Rows) { resultTable.Columns .Add(row["ColumnName"] as string, (Type)row["DataType"] as Type); } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :- V3051 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдбрд╛рд▓реАред рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 'рдЯрд╛рдЗрдк' рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред DbMetaDataFactory.cs 176
- V3051 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдбрд╛рд▓реАред рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 'рдЯрд╛рдЗрдк' рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред OdbcMetaDataFactory.cs 1109
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рдкреНрд░рдХрд╛рд░) рдкрдВрдХреНрддрд┐ ["DataType"] рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд░ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧ рд░рд╣рд╛ рд╣реИ ред рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд╕реНрдЯ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдбрд╛рд▓реА, рддреЛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреЗ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ ред рдпрджрд┐ рдкрдВрдХреНрддрд┐ ["DataType"] рдХрд╛ рдорд╛рди рд╢реВрдиреНрдп рд╣реИ , рддреЛ рдпрд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рджреЛрдиреЛрдВ рдЬрд╛рддрд┐рдпреЛрдВ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░реЗрдЧрд╛ рдФрд░ рдРрдб рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдПрдЧрд╛ ред рдпрджрд┐ рдкрдВрдХреНрддрд┐ ["DataType"] рдПрдХ рдорд╛рди рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рддреЛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдбрд╛рд▓реА рдПрдХ InvalidCastException рдХреЛ рдлреЗрдВрдХ рджреЗрдЧреА ред рдЕрдВрдд рдореЗрдВ, рджреЛ рднреВрдд рдХреНрдпреЛрдВ рд╣реИрдВ? рд╕рд╡рд╛рд▓ рдЦреБрд▓рд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ 43 рд╕рд┐рд╕реНрдЯрдо System.untime.InteropServices.RuntimeInformationрд╕реЗ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рджреЗрдЦреЗрдВ ред public static string FrameworkDescription { get { if (s_frameworkDescription == null) { string versionString = (string)AppContext.GetData("FX_PRODUCT_VERSION"); if (versionString == null) { .... versionString = typeof(object).Assembly .GetCustomAttribute< AssemblyInformationalVersionAttribute>() ?.InformationalVersion; .... int plusIndex = versionString.IndexOf('+'); .... } .... } .... } }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3105 ' versionString ' рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЗрд╕реЗ рдирд▓-рд╕рд╢рд░реНрдд рдСрдкрд░реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛ред NullReferenceException рд╕рдВрднрд╡ рд╣реИред RuntimeInformation.cs 29рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреА рд╣реИ NullReferenceException рдЬрдм рд╡рд┐рдзрд┐ рдмреБрд▓рд╛ indexOf рдЪрд░ VersionString ред рдХрд┐рд╕реА рдЪрд░ рдХреЗ рд▓рд┐рдП рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, рдХреЛрдб рд▓реЗрдЦрдХ InfromationalVersion рдЧреБрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп NullReferenceException рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП '?' 'рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдордЬрд╛рдХ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЙрд▓ GetCustomAttribute <...> рд░рд┐рдЯрд░реНрди рдЕрд╢рдХреНрдд, рдПрдХ рдЕрдкрд╡рд╛рдж рдЕрднреА рднреА рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХрдо - рдЬрдм IndexOf рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ , рдЪреВрдВрдХрд┐ рд╡рд░реНрдЬрдирд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢реВрдиреНрдп рд╣реЛрдЧрд╛ редрд╕рдорд╕реНрдпрд╛ 44рд╣рдо System.ComponentModel.Composition рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рджреЗрдЦрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд 2 рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЧрдИ рдереА: public static bool CanSpecialize(....) { .... object[] genericParameterConstraints = ....; GenericParameterAttributes[] genericParameterAttributes = ....;
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :- V3125 рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'рдЬреЗрдиреЗрд░рд┐рдХрдкреИрд░рдореАрдЯрд░рдХреЙрд╕реНрдЯреНрд░реЗрдиреНрдЯреНрд╕' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 603, 589. рдЬреЗрдиреЗрд░рд┐рдХ рд╕реНрдкреЗрд╢рд▓рд╛рдЗрдЬрд╝реЗрд╢рдирдкрд╛рд░реНрдЯрдХреНрд░рд┐рдпрдирдЗрдиреНрдлреЛ.рдлреЙрд░реНрдореНрд╕ 603
- V3125 рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'рдЬреЗрдиреЗрд░рд┐рдХрдкреИрд░реЗрдЯ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 604, 594. рдЬреЗрдиреЗрд░рд┐рдХ рд╕реНрдкреЗрд╢рд▓рд╛рдЗрдЬрд╝реЗрд╢рдирдкрд╛рд░реНрдЯрдХреНрд░рд┐рдпрдирдЗрдиреНрдлреЛ.рдлреЙрд░реНрдореНрд╕ 604
GenericParameterAttributes! = Null рдФрд░ genericParameterConstraints! = рдХреЛрдб рдореЗрдВ Null рдЪреЗрдХ ред рдЗрд╕рд▓рд┐рдП, рдЗрди рдЪрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп - рдорд╛рдиреНрдп рдорд╛рди, рд╣рдо рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рджреЛрдиреЛрдВ рдЪрд░ рд╢реВрдиреНрдп рд╣реИрдВ , рддреЛ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ - рдХреЛрдИ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рднреА рдЪрд░ рд╢реВрдиреНрдп рд╣реИ , рд▓реЗрдХрд┐рди рд╡рд┐рдзрд┐ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реИ? рдпрджрд┐ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд▓реВрдк рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рддрд╛ рд╣реИ редрдЕрдВрдХ 45рдЖрдЗрдП рдЙрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЦреЗрдВред рдФрд░ рдпрджреНрдпрдкрд┐, рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ - рдкрд╣рд▓реЗ рд╣рдо рдлрд┐рд░ рд╕реЗ рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрдкрд▓рдмреНрдз рдкреНрд░реАрд▓реЗрдЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ NuGet рдкреИрдХреЗрдЬ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝реЗрдВрдЧреЗ (рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг 4.6.0-рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 6.19303.8 рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ)ред рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣: LazyMemberInfo lazyMemberInfo = new LazyMemberInfo(); var eq = lazyMemberInfo.Equals(null); Console.WriteLine(eq);
рдмрд░рд╛рдмрд░ рд╡рд┐рдзрд┐ рдкрд░ docs.microsoft.com рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рдореБрдЭреЗ .NET .NET рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ (" LazyMemberInfo.Equals (рдСрдмреНрдЬреЗрдХреНрдЯ) рд╡рд┐рдзрд┐ ") - рдХреБрдЫ рднреА рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ - рдпрд╣ рд╕рд╣реА рдпрд╛ рдЧрд▓рдд рд╣реИ , рддреЛ рдЙрддреНрдкрдиреНрди рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИредрд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ:рд╣рдо рдереЛрдбрд╝рд╛ рд╡рд┐рдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рд╖реНрдХрд░реНрд╖ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: LazyMemberInfo lazyMemberInfo = new LazyMemberInfo(); var eq = lazyMemberInfo.Equals(typeof(String)); Console.WriteLine(eq);
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдоредрджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдЕрдкрд╡рд╛рдж рдПрдХ рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдЖрдЗрдП рд╣рдо рд╕рдорд╛рди рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрджрд░ рджреЗрдЦреЗрдВ ред public override bool Equals(object obj) { LazyMemberInfo that = (LazyMemberInfo)obj;
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3115 'null' рдХреЛ 'рдмрд░рд╛рдмрд░' рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк 'NullReferenceException' рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред LazyMemberInfo.cs 116рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣рд╛рдБ рдереЛрдбрд╝рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ, рдПрдХ рдмрдбрд╝реА рдЧрд▓рддреА рдХрд░ рджрд┐рдпрд╛ рдХреЗ рдмрд╛рдж рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рд╣реИ that._memberType ред рдЕрдкрд╡рд╛рдж, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдКрдкрд░ рд╣реЛрддреЗ рд╣реИрдВ - рдЬрдм рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (LazyMemberInfo) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдзреНрдпрд╛рди рджрд┐рдпрд╛ред InvalidCastException рдХреЗрд╕рд╛рде , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред NullReferenceException рдХреНрдпреЛрдВ рдмрдврд╝рд╛рдИ рдЬрд╛рддреА рд╣реИ ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ LazyMemberInfo рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рддрджрдиреБрд╕рд╛рд░, рдЕрдирдкреИрдХрд┐рдВрдЧ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╢реВрдиреНрдп рдорд╛рди рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИNullReferenceException ред рдЦреИрд░, рдпрд╣рд╛рдБ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЯрд╛рдЗрдкреЛрд╕ рдХрд╛ рдПрдХ рдЬреЛрдбрд╝рд╛ рднреА рд╣реИ, рдЬреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рднреА рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдПрдХ рдЕрдкрд╡рд╛рдж рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдлреЗрдВрдХрдирд╛ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рднреА рд░рд╣рддрд╛ рд╣реИредрд╕рдорд╕реНрдпрд╛ 46,рдХреБрдЫ рдЗрд╕реА рддрд░рд╣, System.Drawing.Common рдореЗрдВ, TriState рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ ред public override bool Equals(object o) { TriState state = (TriState)o; return _value == state._value; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3115 'null' рдХреЛ 'рдмрд░рд╛рдмрд░' рдкрджреНрдзрддрд┐ рд╕реЗ 'NullReferenceException' рдореЗрдВ рдкрд░рд┐рдгрд╛рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред TriState.cs 53рд╕рдорд╕реНрдпрд╛рдПрдВ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд╣реА рд╣реИрдВредрд╕рдорд╕реНрдпрд╛ 47 System.Text.Jsonрд╕реЗ рдХреБрдЫ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ ред рдпрд╛рдж рд░рдЦреЗрдВ, рд╣рдордиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ ToString рдХреЛ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП ? рдЖрд░реЛрдкрд┐рддред public override string ToString() { switch (TokenType) { case JsonTokenType.None: case JsonTokenType.Null: return string.Empty; case JsonTokenType.True: return bool.TrueString; case JsonTokenType.False: return bool.FalseString; case JsonTokenType.Number: case JsonTokenType.StartArray: case JsonTokenType.StartObject: {
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рд╡рд┐рдзрд┐ рд╢реВрдиреНрдп рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИредPVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3108 рдпрд╣ 'ToSting ()' рд╡рд┐рдзрд┐ рд╕реЗ 'null' рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред JsonElement.cs 1460 GetString ()рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдЖрдЗрдП рдЗрд╕реЗ рджреЗрдЦреЗрдВ: public string GetString() { CheckValidInstance(); return _parent.GetString(_idx, JsonTokenType.String); }
рдЧрд╣рд░реА рдбрд╛рдЗрд╡рд┐рдВрдЧ - GetString рд╡рд┐рдзрд┐ рдХреЗ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ : internal string GetString(int index, JsonTokenType expectedType) { .... if (tokenType == JsonTokenType.Null) { return null; } .... }
рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдирд▓ рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдЗрд╕ рдкрджреНрдзрддрд┐ рд╕реЗ рдФрд░ рд╢реБрд░реВ рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЯреЛрд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЛрдиреЛрдВ рд╕реЗ редрдЕрдВрдХ 48рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЬрдЧрд╣: internal JsonPropertyInfo CreatePolymorphicProperty(....) { JsonPropertyInfo runtimeProperty = CreateProperty(property.DeclaredPropertyType, runtimePropertyType, property.ImplementedPropertyType, property?.PropertyInfo, Type, options); property.CopyRuntimeSettingsTo(runtimeProperty); return runtimeProperty; }
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3042 рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 'рд╕рдВрдкрддреНрддрд┐' рд╡рд╕реНрддреБ JsonClassInfo.AddProperty.cs 179рдЬрдм рдмреБрд▓рд╛ CreateProperty рдмрд╛рд░-рдмрд╛рд░ рдЪрд░ рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╕рдВрдкрддреНрддрд┐ : property.DeclaredPropertyType , property.ImplementedPropertyType , рд╕рдВрдкрддреНрддрд┐ .PropertyInfo? ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реЗ '?' 'рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдпрд╣рд╛рдБ рдкрд░ рдЕрддрд┐рд╢реНрдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИ , рддреЛ рдпрд╣ рдСрдкрд░реЗрдЯрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛NullReferenceException редрд╕рдорд╕реНрдпрд╛ 49рдирд┐рдореНрди рд╕рдВрджрд┐рдЧреНрдз рд╕реНрдерд╛рди System.Security.Cryptography.Xml рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╛рдП рдЧрдП рдереЗ рдФрд░ рд╡реЗ рдЬреЛрдбрд╝реЗ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдмрд╛рд░ рд╣реБрдЖ рд╣реИред рдХреЛрдб рдлрд┐рд░ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЕрдкрдиреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдХрд░реЗрдВредрдкрд╣рд▓рд╛ рдЯреБрдХрдбрд╝рд╛: public void Write(StringBuilder strBuilder, DocPosition docPos, AncestralNamespaceContextManager anc) { docPos = DocPosition.BeforeRootElement; foreach (XmlNode childNode in ChildNodes) { if (childNode.NodeType == XmlNodeType.Element) { CanonicalizationDispatcher.Write( childNode, strBuilder, DocPosition.InRootElement, anc); docPos = DocPosition.AfterRootElement; } else { CanonicalizationDispatcher.Write(childNode, strBuilder, docPos, anc); } } }
рджреВрд╕рд░рд╛ рд╕реНрдирд┐рдкреЗрдЯ: public void WriteHash(HashAlgorithm hash, DocPosition docPos, AncestralNamespaceContextManager anc) { docPos = DocPosition.BeforeRootElement; foreach (XmlNode childNode in ChildNodes) { if (childNode.NodeType == XmlNodeType.Element) { CanonicalizationDispatcher.WriteHash( childNode, hash, DocPosition.InRootElement, anc); docPos = DocPosition.AfterRootElement; } else { CanonicalizationDispatcher.WriteHash(childNode, hash, docPos, anc); } } }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :- V3061 рдкреИрд░рд╛рдореАрдЯрд░ 'docPos' рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рдп рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред CanonicalXmlDocument.cs 37
- V3061 рдкреИрд░рд╛рдореАрдЯрд░ 'docPos' рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рдп рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред CanonicalXmlDocument.cs 54
рдЗрди рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ, docPos рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдХреЛ рдХреЗрд╡рд▓ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд╕рдорд╕реНрдпрд╛ 50 System.Data.SqlClientрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ ред private bool IsBOMNeeded(MetaType type, object value) { if (type.NullableType == TdsEnums.SQLXMLTYPE) { Type currentType = value.GetType(); if (currentType == typeof(SqlString)) { if (!((SqlString)value).IsNull && ((((SqlString)value).Value).Length > 0)) { if ((((SqlString)value).Value[0] & 0xff) != 0xff) return true; } } else if ((currentType == typeof(string)) && (((String)value).Length > 0)) { if ((value != null) && (((string)value)[0] & 0xff) != 0xff) return true; } else if (currentType == typeof(SqlXml)) { if (!((SqlXml)value).IsNull) return true; } else if (currentType == typeof(XmlDataFeed)) { return true;
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдорд╛рди' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 8696, 8708. TdsParser.cs 8696рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рдорд╛рди рдЪреЗрдХ рдХрд░рдХреЗ рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ рдерд╛ ! = рдПрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрд╢рдХреНрдд ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдкрд░рд╡рд░рд┐рд╢ рдХреЗ рджреМрд░рд╛рди рд╡рд╣рд╛рдВ рдЦреЛ рдЧрдИ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдмрд╛рд░ рдКрдкрд░ рд╕реЗ рдореВрд▓реНрдп рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ , рддреЛ рдЪреАрдЬреЗрдВ рдЦрд░рд╛рдм рд╣реЛрддреА рд╣реИрдВредрдЕрдВрдХ 51рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдЕрдЧрд▓реА рддреНрд░реБрдЯрд┐, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред protected virtual TDSMessageCollection CreateQueryResponse(....) { .... if (....) { .... } else if ( lowerBatchText.Contains("name") && lowerBatchText.Contains("state") && lowerBatchText.Contains("databases") && lowerBatchText.Contains("db_name"))
рдЪреЗрддрд╛рд╡рдиреА PVS-Studio : V3053 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред 'рдирд╛рдо' рдФрд░ 'db_name' рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред QueryEngine.cs 151рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, lowBatchText.Contains ("name") рдФрд░ LowerBatchText.Contains ("db_name") рд╕рдмрдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХрд╛ рд╕рдВрдпреЛрдЬрди рдЕрддрд┐рд░реЗрдХ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдХрд▓реНрдк "db_name" рд╣реИ , рддреЛ рдЗрд╕рдореЗрдВ "рдирд╛рдо" рдирд╛рдо рдХрд╛ рд╡рд┐рдХрд▓реНрдк рднреА рд╣реЛрдЧрд╛ ред рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ "рдирд╛рдо" рдирд╣реАрдВ рд╣реИ , рддреЛ рдЗрд╕рдореЗрдВ "db_name" рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд▓реЛрдЕрд░рдмреИрдЪрдЯреЗрдХреНрд╕реНрдЯ рдЪреЗрдХрд┐рдВрдЧред рдХреЙрдиреНрдЯреИрдХреНрдЯреНрд╕ ("рдирд╛рдо")рдмреЗрдорд╛рдиреА рд╣реИред рдЬрдм рддрдХ рдпрд╣ рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд░рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ "рдирд╛рдо" рдирд╣реАрдВ рд╣реИ редрд╕рдорд╕реНрдпрд╛ 52 System.Net.RequestsрдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ ред protected override PipelineInstruction PipelineCallback( PipelineEntry entry, ResponseDescription response, ....) { if (NetEventSource.IsEnabled) NetEventSource.Info(this, $"Command:{entry?.Command} Description:{response?.StatusDescription}");
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3125 'рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 270, 227. FtpControlStream.cs 270рдЬрдм рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯреЗрдб рд▓рд╛рдЗрди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ред рдХрдорд╛рдВрдб рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп 'ред' рд╕рдВрдЪрд╛рд▓рдХ рдпрджрд┐ рдХреЛрдИ рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдЕрд╢рдХреНрдд рд╣реИ, рддреЛ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП '?' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рддрдХрдиреАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдЕрд╢рдХреНрдд рдорд╛рди рдХрд╛рдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ == рд╢реВрдиреНрдп рд╕реЗ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ ), рд▓реЗрдХрд┐рди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдПрдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдирддреАрдЬрддрди, рдпрджрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╢реВрдиреНрдп рд╣реИ , рддреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЛрдореИрдВрдб (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред ' рдмрд▓реНрдХрд┐ '? ') рдХреЗ рдмрдЬрд╛рдп редрдЕрдЧрд▓рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд┐рд░ рд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЕрдзреНрдпрдпрди рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдФрд░ рд╡рд┐рд░рд╛рдо рд▓реЗрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ - рдереЛрдбрд╝реА рд╡реНрдпрд╛рдХреБрд▓рддрд╛, рдЪрд╛рдп рдкреАрдирд╛ рдпрд╛ рдХреЙрдлреА рдмрдирд╛рдирд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАредрдХреНрдпрд╛ рдЖрдк рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ? рддреЛ рдЪрд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред :)
рдЕрдВрдХ 53рдЕрдм System.Collections.Immutable рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рджреЗрдЦреЗрдВ ред рдЗрд╕ рдмрд╛рд░, System.Collections.Immutable.ImmutableArray <T> рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ ред рд╣рдо IStructuralEquatable.Equals рдФрд░ IStructuralComparable.CompareTo рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ редрдЖрдЗрдП IStructuralEquatable.Equals рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ ред рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ: bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) { var self = this; Array otherArray = other as Array; if (otherArray == null) { var theirs = other as IImmutableArray; if (theirs != null) { otherArray = theirs.Array; if (self.array == null && otherArray == null) { return true; } else if (self.array == null) { return false; } } } IStructuralEquatable ours = self.array; return ours.Equals(otherArray, comparer); }
рдХреНрдпрд╛ рдЖрдк рд╕рдлрд▓ рд╣реБрдП? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдлрд┐рд░ рд╕реЗ, рдмрдзрд╛рдИред :)
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3125 'рд╣рдорд╛рд░реЗ' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1212, 1204. ImmutableArray_1.cs 1212рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдВрддрд┐рдо рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рд╕реНрдерд┐рдд рд╣рдорд╛рд░реЗ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдХреНрд╡рд▓реНрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐ рдХреА рдХреЙрд▓ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ NullReferenceException рдХрд╛ рдЕрдкрд╡рд╛рдж рд╕рдВрднрд╡ рд╣реИ ред рд╡рд╣ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪреЗ? рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдЙрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдХреЛрдб рд╣реИред bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) { .... if (....) { .... if (....) { .... if (self.array == null && otherArray == null) { .... } else if (self.array == null) { .... } } } IStructuralEquatable ours = self.array; return ours.Equals(otherArray, comparer); }
рдкрд┐рдЫрд▓реЗ рднрд╛рд╡реЛрдВ рд╕реЗ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдорд╛рди рд╕реНрд╡.рд░реНрд░реЗ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдКрдкрд░, self.array == рдирд▓ рдХреА рдЬрд╛рдБрдЪ рдХрдИ рдмрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ ред рдЗрд╕рд▓рд┐рдП, self.array , рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ , рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рдХрдо рд╕реЗ рдХрдо рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВред рдХреНрдпрд╛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ? рдЖрдЗрдП рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдореИрдВ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реВрдВред bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) { var self = this;
рдореБрдЦреНрдп рдмрд┐рдВрджреБ 1 ред self.array == this.array ( рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░рдг = рдпрд╣ )ред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдПрдХ рд░рд╛рдЬреНрдп рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ this.array == рдмрд╛рддрд┐рд▓ редрдореБрдЦреНрдп рдмрд┐рдВрджреБ реи ред рд╣рдо рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ , рдЬреЛ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛, рдпрд╛ рдЕрдВрджрд░ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрджрд┐ , рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдЪрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрд░реЗ рдпрд╛ рдЗрд╕рдХрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИ рдФрд░ рдЕрдиреНрдп рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ ред рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджрдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдо рдкрд╣рд▓реЗ рдмрдпрд╛рди рдХреА рдЕрдирджреЗрдЦреА рдХрд░реЗрдВрдЧреЗ редрдореБрдЦреНрдп рдмрд┐рдВрджреБ 3 ред рдЗрд╕ рдмрд┐рдВрджреБ рдХрд╛ рдЕрд░реНрде рд╣реИ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рд░реНрдЧред рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреВрд╕рд░реЗ рдкрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЕрдЧрд░ рдмрдпрд╛рди (рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЙрдирдХреЗ рд╕рд╛рде! = рдЕрд╢рдХреНрдд )ред рдЕрдЧрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рддреЛ -branch, рд╣рдо рд╣рдорд╛рд░реЗ рд╡рд╛рдВрдЫрд┐рдд рдЕрдиреБрдЪреНрдЫреЗрдж 5 рдкреНрд░рджрд╛рди рдХреА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ self.array == рдЕрд╢рдХреНрдд рдПрдХ рдкреНрд░рдореБрдЦ рдореБрджреНрджрд╛ 4. рдХреА рд╡рдЬрд╣ рд╕реЗ рдЖрджреЗрд╢ рдСрдкрд░реЗрдЯрд░ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдореЗрдВ рдЕрдЧрд░ рдПрдХ рдкреНрд░рдореБрдЦ рдореБрджреНрджрд╛ 3, рдЖрдк рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рд╕реНрдерд┐рддрд┐:- рдПрдХ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдерд╛ рдЕрд╢рдХреНрдд ;
- рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ рдЕрдиреНрдп IImmutableArray рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред
рдореБрдЦреНрдп рдмрд┐рдВрджреБ 5 ред рдпрджрд┐ рд╣рдо рдЗрд╕ рдорд╛рди рдХреЛ self.array == null рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдордиреЗ рдЕрдкрдирд╛ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдФрд░ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ редрд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рд╕реЗрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рд▓рдХреНрд╖реНрдп рддрдХ рд▓реЗ рдЬрд╛рдПрдВрдЧреЗредрдкрд╣рд▓рд╛: рдпрд╣.рдЕрд░реЗ рдЕрд╢рдХреНрдд рд╣реИ редрджреВрд╕рд░рд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ:- рдЕрдиреНрдп - рдЕрд╢рдХреНрдд ;
- рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдПрд░реЗ рдпрд╛ рдЗрд╕рдХрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИ;
- рдЕрдиреНрдп рдХреЗ рдкрд╛рд╕ рдПрдХ Array рдкреНрд░рдХрд╛рд░ рдпрд╛ рдЗрд╕рдХрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реИ, рдФрд░ рди рд╣реА рдпрд╣ IImmutableArray рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ ред
рд╕рд░рдгреА рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: internal T[] array;
рдЪреВрдВрдХрд┐ ImmutableArray <T> рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдмрд┐рдирд╛ рддрд░реНрдХ рдХреЗ) рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд░рдгреА рдлрд╝реАрд▓реНрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЕрд░реНрдерд╛рддреН , рдЕрд╢рдХреНрдд рд╣реЛрдЧрд╛ ред рдФрд░ рдпрд╣реА рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПредрдЦреИрд░, рд╣рдо рдпрд╣ рдирд╣реАрдВ рднреВрд▓реЗрдВрдЧреЗ рдХрд┐ рд╣рдордиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдХреЙрд▓ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рдХрд▓рд╛рдХрд╛рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рд░реНрдб рд╣реИрдВред рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдбрд┐рдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВредрдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ 1 ред var comparer = EqualityComparer<String>.Default; ImmutableArray<String> immutableArray = new ImmutableArray<string>(); ((IStructuralEquatable)immutableArray).Equals(null, comparer);
рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ 2 ред var comparer = EqualityComparer<String>.Default; ImmutableArray<String> immutableArray = new ImmutableArray<string>(); ((IStructuralEquatable)immutableArray).Equals(new string[] { }, comparer);
рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ 3 ред var comparer = EqualityComparer<String>.Default; ImmutableArray<String> immutableArray = new ImmutableArray<string>(); ((IStructuralEquatable)immutableArray).Equals(typeof(Object), comparer);
рд╕рднреА рддреАрди рдХреЛрдб рдЕрдВрд╢реЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдирд┐рд╖реНрдкрд╛рджрди рдкрдереЛрдВ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдЕрдВрдХ 54рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рднреВрд▓реЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред :) рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭреЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВред int IStructuralComparable.CompareTo(object other, IComparer comparer) { var self = this; Array otherArray = other as Array; if (otherArray == null) { var theirs = other as IImmutableArray; if (theirs != null) { otherArray = theirs.Array; if (self.array == null && otherArray == null) { return 0; } else if (self.array == null ^ otherArray == null) { throw new ArgumentException( SR.ArrayInitializedStateNotEqual, nameof(other)); } } } if (otherArray != null) { IStructuralComparable ours = self.array; return ours.CompareTo(otherArray, comparer);
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3125 'рд╣рдорд╛рд░реЗ' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1265, 1251. ImmutableArray_1.cs 1265рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдерд┐рддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИредрд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ: Object other = ....; var comparer = Comparer<String>.Default; ImmutableArray<String> immutableArray = new ImmutableArray<string>(); ((IStructuralComparable)immutableArray).CompareTo(other, comparer);
рдЖрдЗрдП рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрд╕ рдмрд┐рдВрджреБ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреЗрдВ рдЬрд╣рд╛рдВ NullReferenceException рдХрд╛ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ редрдореВрд▓реНрдп : рдЕрдиреНрдп - рдирдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ [] {} ;рдкрд░рд┐рдгрд╛рдо:рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдлрд┐рд░ рд╕реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИредрдЕрдВрдХ 55 System.Net.HttpListenerрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдИ рд╕реНрдерд╛рди рдереЗ , рди рдХреЗрд╡рд▓ рд╕рдВрджрд┐рдЧреНрдз, рдмрд▓реНрдХрд┐ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рдорд╛рдиред рдФрд░ рдлрд┐рд░, рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд░реЗрдВрдЧрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рд╕рдВрджреЗрд╣ред рдЪреВрдВрдХрд┐ рдкреИрдЯрд░реНрди рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ; рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреВрдВрдЧрд╛: public override IAsyncResult BeginRead(byte[] buffer, ....) { if (NetEventSource.IsEnabled) { NetEventSource.Enter(this); NetEventSource.Info(this, "buffer.Length:" + buffer.Length + " size:" + size + " offset:" + offset); } if (buffer == null) { throw new ArgumentNullException(nameof(buffer)); } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3095 'рдмрдлрд░' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 51, 53. HttpRequestStream.cs 51 рдмрдлрд░ == рдХреЗ рд╕рд╛рде ArgumentNullExceptionрдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдЙрдард╛рдирд╛ = рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЕрд╢рдХреНрдд рдЗрд╕ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдорд╛рдиреНрдп рдорд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдореВрд▓реНрдп NetEventSource.IsEnabled - рд╕рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрдлрд░ ' - рдЕрд╢рдХреНрдд , рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╣реЛрдЧрд╛ NullReferenceException рдЬрдм рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЧрдгрдирд╛ buffer.length ред рддрджрдиреБрд╕рд╛рд░, рдмрдлрд░ == рдирд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗрдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдорд╛рдорд▓рд╛ рднреА рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИредрдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдЕрдиреНрдп рдкрджреНрдзрддрд┐рдпреЛрдВ рдкрд░ рд╕рдорд╛рди рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рдХреА рдЧрдИ рд╣реИрдВ:- V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдмрдлрд░' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 49, 51. HttpResponseStream.cs 49
- V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдмрдлрд░' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 74, 75. HttpResponseStream.cs 74
рд╕рдорд╕реНрдпрд╛ 56 System.Transactions.LocalрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ ред internal override void EnterState(InternalTransaction tx) { if (tx._outcomeSource._isoLevel == IsolationLevel.Snapshot) { throw TransactionException.CreateInvalidOperationException( TraceSourceType.TraceSourceLtm, SR.CannotPromoteSnapshot, null, tx == null ? Guid.Empty : tx.DistributedTxId); } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'tx' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 3282, 3285. TransactionState.cs 3282рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢рд░реНрдд рдХреЗ рддрд╣рдд, рд╡реЗ InvalidOperationException рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ред рдЬрдм рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ tx рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрд╡рд╛рдж рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдЗрд╕реЗ null рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ tx.DistributedTxId рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп NullReferenceException рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рди рдлреЗрдВрдХреЗ ред рд╡рд┐рдбрдВрдмрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ tx - null рдпрд╣ рдЪреЗрдХ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЬрдм рд╕реЗ рдХрд┐ рдЕрдЧрд░ рдХрдерди рдХреА рд╢рд░реНрддреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЙрджрд╛рд╣рд░рдг рдлрд╝реАрд▓реНрдб tx рдЪрд░ - tx._outcomeSource._isoLevel рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ ред System.Runtime.Caching рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ57рдХреЛрдб рдЬрд╛рд░реА рдХрд░реЗрдВ ред internal void SetLimit(int cacheMemoryLimitMegabytes) { long cacheMemoryLimit = cacheMemoryLimitMegabytes; cacheMemoryLimit = cacheMemoryLimit << MEGABYTE_SHIFT; _memoryLimit = 0;
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'cacheMemoryLimit! = 0 && _memLLimit! = 0' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред CacheMemoryMonitor.cs 250рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рднрд╛рд╡ - cacheMemoryLimit! = 0 && _memoryLimit! = 0 - рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ ред рдЪреВрдВрдХрд┐ _moryLimit рдХрд╛ рдорд╛рди 0 рд╣реИ ( рдЗрд╕реЗ if рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ ), && рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд░рд╛рдЗрдЯ рдСрдкрд░реЗрдВрдб рдЧрд▓рдд рд╣реИ , рдЗрд╕рд▓рд┐рдП, рдкреВрд░реЗ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рднреА рдЧрд▓рдд рд╣реИ редрд╕рдорд╕реНрдпрд╛ 58рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд System.Diagnostics.TraceSource рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдЯреБрдХрдбрд╝рд╛ рд╣реИ ред public override object Pop() { StackNode n = _stack.Value; if (n == null) { base.Pop(); } _stack.Value = n.Prev; return n.Value; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3125 'n' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЗрд╕реЗ null рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 115, 111. рд╕рд╣рд╕рдВрдмрдВрдз рдкреНрд░рдмрдВрдзрдХред рджрд┐рд▓рдЪрд╕реНрдк 115 рдХреЛрдбред N == null рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг , рдореИрдВ рдорд╛рдиреВрдВрдЧрд╛ рдХрд┐ null рдЗрд╕ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╣реЛрдЧрд╛ NullReferenceException рдЬрдм рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЙрдкрд░реНрдЯреА рдПрдХреНрд╕реЗрд╕ - n.Prev ред рдпрджрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ n рдХрднреА рднреА рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ , рддреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдзрд╛рд░ .Pop () рдХреЙрд▓рд┐рдВрдЧ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрд╕рдорд╕реНрдпрд╛ 59рдкреНрд░реЛрдЬреЗрдХреНрдЯ System.Drawing.Primatics рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рди рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдлрд┐рд░ рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рджрдо рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ: public static string ToHtml(Color c) { string colorString = string.Empty; if (c.IsEmpty) return colorString; if (ColorUtil.IsSystemColor(c)) { switch (c.ToKnownColor()) { case KnownColor.ActiveBorder: colorString = "activeborder"; break; case KnownColor.GradientActiveCaption: case KnownColor.ActiveCaption: colorString = "activecaption"; break; case KnownColor.AppWorkspace: colorString = "appworkspace"; break; case KnownColor.Desktop: colorString = "background"; break; case KnownColor.Control: colorString = "buttonface"; break; case KnownColor.ControlLight: colorString = "buttonface"; break; case KnownColor.ControlDark: colorString = "buttonshadow"; break; case KnownColor.ControlText: colorString = "buttontext"; break; case KnownColor.ActiveCaptionText: colorString = "captiontext"; break; case KnownColor.GrayText: colorString = "graytext"; break; case KnownColor.HotTrack: case KnownColor.Highlight: colorString = "highlight"; break; case KnownColor.MenuHighlight: case KnownColor.HighlightText: colorString = "highlighttext"; break; case KnownColor.InactiveBorder: colorString = "inactiveborder"; break; case KnownColor.GradientInactiveCaption: case KnownColor.InactiveCaption: colorString = "inactivecaption"; break; case KnownColor.InactiveCaptionText: colorString = "inactivecaptiontext"; break; case KnownColor.Info: colorString = "infobackground"; break; case KnownColor.InfoText: colorString = "infotext"; break; case KnownColor.MenuBar: case KnownColor.Menu: colorString = "menu"; break; case KnownColor.MenuText: colorString = "menutext"; break; case KnownColor.ScrollBar: colorString = "scrollbar"; break; case KnownColor.ControlDarkDark: colorString = "threeddarkshadow"; break; case KnownColor.ControlLightLight: colorString = "buttonhighlight"; break; case KnownColor.Window: colorString = "window"; break; case KnownColor.WindowFrame: colorString = "windowframe"; break; case KnownColor.WindowText: colorString = "windowtext"; break; } } else if (c.IsNamedColor) { if (c == Color.LightGray) {
рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдпреЗ рдореЗрд░реЗ рдордЬрд╛рдХ рд╣реИрдВ ... рдпрд╛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рдереЗ? рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЫреЛрдЯрд╛ рдХрд░ рджреЗрдВрдЧреЗредрдпрд╣рд╛рдБ рдХреЛрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ: switch (c.ToKnownColor()) { .... case KnownColor.Control: colorString = "buttonface"; break; case KnownColor.ControlLight: colorString = "buttonface"; break; .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3139 рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗрд╕-рд╢рд╛рдЦрд╛рдПрдБ рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред ColorTranslator.cs 302рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЧрд▓рддреА рд╣реИред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рд╡реЗ рдХрдИ рдЧрдгрдирд╛ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реБрдП рдХрдИ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ред рдФрд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЧрд▓рддреА рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИредрдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛ рдЦреЛрджрдирд╛ред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдП рдЧрдП ToHtml рд╡рд┐рдзрд┐ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ "рдмрдЯрдирдлреЗрд╕" рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдк рдирд┐рдореНрди рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЗрдирдкреБрдЯ (рдЕрдкреЗрдХреНрд╖рд┐рдд) рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:- SystemColors.Control ;
- SystemColors.ControlLight ред
рдпрджрд┐ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП ARGB рдорд╛рди рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:- SystemColors.Control - (255, 240, 240, 240) ;
- SystemColors.ControlLight - (255, 227, 227, 227) ред
рдпрджрд┐ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп ( "рдмрдЯрдирдлреЗрд╕" ) рдХреЛ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рд░рд┐рд╡рд░реНрд╕ рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ - FromHtml рд╕реЗ , рд╣рдореЗрдВ рд░рдВрдЧ рдирд┐рдпрдВрддреНрд░рдг (255, 240, 240, 240) рдорд┐рд▓рддрд╛ рд╣реИ ред рдХреНрдпрд╛ рдореБрдЭреЗ FromHtml рд╕реЗ рдПрдХ ControlLight рд░рдВрдЧ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ ? рд╣рд╛рдВред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рдПрдХ рд░рдВрдЧ рддрд╛рд▓рд┐рдХрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ (рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ) рд░рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рд╣реИ: s_htmlSysColorTable["threedhighlight"] = ColorUtil.FromKnownColor(KnownColor.ControlLight);
рддрджрдиреБрд╕рд╛рд░, FromHtml рдиреЗ "рдереНрд░рд┐рдзрдШрд▓рд╛рдЗрдЯ" рдорд╛рди рдХреЗ рд▓рд┐рдП рдХрд▓рд░ рдХрдВрдЯреНрд░реЛрд▓рд▓рд╛рдЗрдЯ (255, 227, 227, 227) рд▓реМрдЯрд╛рдпрд╛ ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣ рдореВрд▓реНрдп рдерд╛ рдЬреЛ рдХрд┐ KnownColor.ControlLight рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ редрд╕рдорд╕реНрдпрд╛ 60 System.Text.RegularExpressionsрдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рджреЗрдЦреЗрдВ ред internal virtual string TextposDescription() { var sb = new StringBuilder(); int remaining; sb.Append(runtextpos); if (sb.Length < 8) sb.Append(' ', 8 - sb.Length); if (runtextpos > runtextbeg) sb.Append(RegexCharClass.CharDescription(runtext[runtextpos - 1])); else sb.Append('^'); sb.Append('>'); remaining = runtextend - runtextpos; for (int i = runtextpos; i < runtextend; i++) { sb.Append(RegexCharClass.CharDescription(runtext[i])); } if (sb.Length >= 64) { sb.Length = 61; sb.Append("..."); } else { sb.Append('$'); } return sb.ToString(); }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3137 'рд╢реЗрд╖' рдЪрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред RegexRunner.cs 612рдПрдХ рдорд╛рди рд╢реЗрд╖ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреБрдЫ рдХреЛрдб рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡реЗ рдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдПред рдпрд╛ рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдЧрд▓рддреА рд╣реИ рдФрд░ рдЗрд╕ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПредрдЕрдВрдХ 61 public void AddRange(char first, char last) { _rangelist.Add(new SingleRange(first, last)); if (_canonical && _rangelist.Count > 0 && first <= _rangelist[_rangelist.Count - 1].Last) { _canonical = false; } }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3063 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: _rangelist.Count> 0. RegexCharClass.cs 523рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдареАрдХ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ - _rangelist.Count> 0 - рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рднрд▓реЗ рд╣реА _rangelist рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХреА рдЧрдИ рд╕реВрдЪреА рдЦрд╛рд▓реА рдереА, рддрддреНрд╡ _rangelist.Add (....) рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж , рдпрд╣ рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред62 рдЬрд╛рд░реАрдиреИрджрд╛рдирд┐рдХ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдирдЬрд░ V3128 рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ System.Drawing.Common рдФрд░ System.Transactions.Local ред private class ArrayEnumerator : IEnumerator { private object[] _array; private object _item; private int _index; private int _startIndex; private int _endIndex; public ArrayEnumerator(object[] array, int startIndex, int count) { _array = array; _startIndex = startIndex; _endIndex = _index + count; _index = _startIndex; } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3128 '_index' рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЖрд░рдВрднрд┐рдХ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред PrinterSettings.Windows.cs 1679 _endIndexрдлрд╝реАрд▓реНрдб рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╕рдордп , рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - _index , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдордп рдореЗрдВ рдПрдХ рдорд╛рдирдХ рдорд╛рди рд╣реИ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ (int) , рдЕрд░реНрдерд╛рдд, 0 ред _Index рдлрд╝реАрд▓реНрдб рдХреЗ рдиреАрдЪреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рд░рдВрдн рд╣реИред рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдпрд╣ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ - _index рдЪрд░ рдХреЛ рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рднреНрд░рдорд┐рдд рди рд╣реЛредрдЕрдВрдХ 63 internal class TransactionTable { .... private int _timerInterval; .... internal TransactionTable() {
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V3128 рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ '_timerInterval' рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред TransactionTable.cs 151рд╕реНрдерд┐рддрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЗ рд╕рдорд╛рди рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, _timerInterval рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЬрдмрдХрд┐ рдпрд╣ рдЕрднреА рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ (int рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ ) _timer рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА _timerInterval рдлрд╝реАрд▓реНрдб рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ редрдЕрдВрдХ 64рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреЗрддрд╛рд╡рдиреА рдПрдХ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдереА рдЬреЛ рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдФрд░ рдПрдХ рдЕрдВрддрд┐рдо рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕рдХреА рдорджрдж рд╕реЗ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рдпреЗ рдЬрдЧрд╣реЗрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдЬреИрд╕реА рд▓рдЧрддреА рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЛрдб рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред private bool ProcessNotifyConnection(....) { .... WeakReference reference = (WeakReference)( LdapConnection.s_handleTable[referralFromConnection]); if ( reference != null && reference.IsAlive && null != ((LdapConnection)reference.Target)._ldapHandle) { .... } .... }
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА (рд╕реНрдЯрдм) : VXXXX TODO_MESSAGE LdapSessionOptions.cs 974рдЦрддрд░реЗ рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдмрд╛рдж рдЬрд╛рдБрдЪ рд╣реИ reference.IsAlive рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рддрд╣рдд рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╣реИ рдХрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ WeakReference , reference.Target рд▓реМрдЯ рдореВрд▓реНрдп рдЕрд╢рдХреНрдд ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрд╡реГрддреНрддрд┐ рдлрд╝реАрд▓реНрдб _ldapHandle рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдкрд░ , NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рджрд░рдЕрд╕рд▓, Microsoft рд╕реНрд╡рдпрдВ рднреА рдЗрд╕ рдЬрд╛рд▓ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред Docs.microsoft.com рд╕реЗ рдЙрджреНрдзрд░рдг - " WeakReference.IsAlive рд╕рдВрдкрддреНрддрд┐ ":Because an object could potentially be reclaimed for garbage collection immediately after the IsAlive property returns true, using this property is not recommended unless you are testing only for a false return value.рдХреНрдпрд╛ рдпреЗ рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд╛рдП рдЧрдП рд╣реИрдВ? рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ! рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ, рдореИрдВрдиреЗ рдзреНрдпрд╛рди рд╕реЗ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрд╛ред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рддреА рдЧрдИ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд▓реЗрдЦ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рд╣реЛрдЧреА, рдореИрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝реНрд▓рд┐рдк рдХрд┐рдпрд╛, рдХреЗрд╡рд▓ рд╡рд╣реА рдЪреБрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдореБрдЭреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдЬрдм рдореИрдВ рдЕрдВрддрд┐рдо (рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд▓реЙрдЧ) рдХреЗ рдкрд╛рд╕ рдЧрдпрд╛, рддреЛ рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рдерд╛ рд╡рд╣ рд╕рднреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреНрд▓рд┐рдк рдХрд░рдирд╛ рдерд╛ рдЬрдм рддрдХ рдХрд┐ рдореЗрд░реА рдЖрдБрдЦреЗрдВ рдХрд┐рд╕реА рдЕрд╕рд╛рдорд╛рдиреНрдп рдЪреАрдЬ рдкрд░ рдкрдХрдбрд╝ рдирд╣реАрдВ рд▓реЗрддреАред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЗрд╕рдореЗрдВ рддрд▓реНрд▓реАрди рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдХрдИ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЬрдЧрд╣реЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рд╕рднреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ V3022 рдФрд░ V3063 рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ ред рдпрджрд┐ рдкреНрд░рдкрддреНрд░ рдХрд╛ рдПрдХ рдХреЛрдб рдерд╛, рддреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдмреЛрд▓рдирд╛: String str = null; if (str == null) ....
рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рджрд┐рд▓рдЪрд╕реНрдк рдЬрдЧрд╣реЗрдВ рдереАрдВ рдЬрд┐рдирдХрд╛ рдореИрдВ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рддрд╛рд▓рд╛ рдкрд░ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рддрд╛рд▓рд╛ рдмрдпрд╛рди рдкрд░ рд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ , рдЖрджрд┐ - рд╡реА 3090 ; рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдИрд╡реЗрдВрдЯ рдХреЙрд▓ - V3083 ; рдЬрд┐рд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╕реНрддреБрдУрдВ IDisposable , рд▓реЗрдХрд┐рди рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЙрд▓ рдирд┐рдкрдЯрд╛рди / рдмрдВрдж - V3072 рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдирд┐рджрд╛рди; рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫредрдореИрдВрдиреЗ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛ (рдХрдо рд╕реЗ рдХрдо рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рдореИрдВ рдЧрд▓рддреА рд╕реЗ рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХрддрд╛ рдерд╛) рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкрд╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдорд┐рд▓реАрдВред рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬреЛ рдореБрдЭреЗ рдЙрдирдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣реЗ рдереЗред рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗредрд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдХреБрдЫ рд╣реИ - рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рдИ рдЧрдИ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ редрдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдЕрд╕рдорд╛рди рд▓рдЧ рд░рд╣реА рдереАред рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдл рд╣реИрдВ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдореЗрдВ рд╕рдВрджрд┐рдЧреНрдз рд╕реНрдерд╛рди рд╣реИрдВред рд╢рд╛рдпрдж рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВредрдпрджрд┐ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд╢рд╛рдпрдж, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд╛рдлреА рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдХрд╛рдлреА рд╣реИред рд▓реЗрдХрд┐рди, рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░, рдХреБрдЫ рдЕрдВрдзреЗрд░реЗ рдХреЛрдиреЗ рдереЗредрд╡реИрд╕реЗ, рдЗрд╕ рдЖрдХрд╛рд░ рдХреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдкрд░реАрдХреНрд╖рд╛ рд╣реИред рдореИрдВ рдЭреВрдареА / рдЕрдЬреАрдм рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рд╛ рдФрд░ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рдЬрд╣рд╛рдВ рдпрд╣ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкрд░ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИредрдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдЧрд░ рдЖрдкрдХреЛ рдкреВрд░рд╛ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдЬрд╛рдирд╛ рд╣реИ - рддреЛ рдореБрдЭреЗ рд╣рд╛рде рдорд┐рд▓рд╛рдиреЗ рджреАрдЬрд┐рдП! рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдФрд░ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдпрджрд┐ рдЖрдкрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ - рдореБрдЭреЗ рджреЛрдЧреБрдирд╛ рдЦреБрд╢реА рд╣реЛрдЧреАред
рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдорджрдж рдЕрддрд┐рд░реЗрдХ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ рдпрд╛ рдЖрдк рджрд┐рд▓рдЪрд╕реНрдк рдЦреЛрдЬреЗ рдЧрдП рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рддреЛ support@viva64.com рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ ред :)
рдСрд▓ рдж рдмреЗрд╕реНрдЯ!PS рд╕рдВрдкрд░реНрдХ .NET рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЗрд╡рд▓рдкрд░реНрд╕
рдЖрдк рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдЖрдк рдорд╣рд╛рди рдЕрдзреНрдпреЗрддрд╛ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдореЗрдВ рд╕рднреА рд╕рдВрджрд┐рдЧреНрдз рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ - рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рд╕рднреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рда / рддреНрд░реБрдЯрд┐ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ ( рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд▓рд┐рдЦрд╛ рд╣реИред рдпрд╣рд╛рдБ )ред
рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╕рд░реНрдЧреЗрдИ рд╡рд╛рд╕рд┐рд▓рд┐рд╡ред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдЯреЗрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ .NET рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛