рдХреИрд╕реЗ PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкрд╛рдИ рдЧрдИ ... PVS-Studio рдХреА рдХрд╣рд╛рдиреА

рдЪрд┐рддреНрд░ 1

рдпрд╣ рдПрдХ рдЫреЛрдЯреА рдХрд╣рд╛рдиреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреЗ рд╣рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдФрд░ рдпрд╣ рдПрдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдереА рд▓реЗрдХрд┐рди рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдХ рдереА - рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреАред

PVS-Studio_Cmd (рдФрд░ рд╕рд╛рде рд╣реА рдХреБрдЫ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ) рдореЗрдВ рд╣рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рддрд░реНрдХ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдХрдорд╛рдВрдбрд▓рд╛рдЗрдиред

рдЖрдЬ рдореИрдВрдиреЗ PVS-Studio_Cmd рдореЗрдВ рдирдП рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдФрд░ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВ рдЗрд╕реЗ рдбрд┐рдмрдЧ рднреА рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЕрдкрд░рд┐рдЪрд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред

рддреЛ, рдХреЛрдб рд▓рд┐рдЦрд╛, рд╕рдВрдХрд▓рд┐рдд, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдФрд░ ...

рдЪрд┐рддреНрд░ 3

рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдВрджрд░ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдкрдХреНрд╖ рд╕реЗ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ - рдореИрдВ рдХрд┐рд╕реА рднреА рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреИрд▓реА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВред рдпрд╣ рд╢рд╛рдпрдж рд╣реА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡реЗ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреА рдШрдЯрдирд╛ рдХреА рд╢рд░реНрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред

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

рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ NullReferenceException рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ (рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ)ред

рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИ (рдФрд░ рдЬрд╣рд╛рдВ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ), рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ, рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдбреАрдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред рд╣рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.9.71 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реВрдВ, рдбреАрдмрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦрддрд╛ рд╣реВрдВ:

рдЪрд┐рддреНрд░ 4

рддреЛ, рд╡рд╣ рд╕реНрдерд╛рди рдЬрд╣рд╛рдБ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ, рд╕реНрдкрд╖реНрдЯ рд╣реИ - helpInfo рдХреЗ рдкрд╛рд╕ рдЕрд╢рдХреНрдд рдорд╛рди рд╣реИ, рдЬреЛ рд╡рд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп NullReferenceException рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рд▓рдЧрд╛ред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, C # рдХреЗ рд▓рд┐рдП PVS-Studio рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рдХреА рдЦреЛрдЬ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдЗрдВрдЯрд░рдкреНрд░реЛрдбреЗрдХреНрдЯреЛрд░рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рддреБрд░рдВрдд рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдХрд┐ рдХреНрдпрд╛ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪрд░реНрдЪрд╛ рдХреЗ рддрд╣рдд рддреНрд░реБрдЯрд┐ рдкрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХреА рдФрд░ рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдореИрдВрдиреЗ рд╡рд╣реА рджреЗрдЦрд╛ рдЬреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рдереАред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V3080 'рд╣реЗрд▓реНрдкрдЗрдиреНрдлреЛ.рд▓рд┐рдлреНрдЯ' рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрддрддрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред 2 рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: helpInfoред Parser.cs 405

рд╣рд╛рдБ, рдпрд╣ рдмрд╛рдд рд╣реИ! рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдЪрд▓реЛ рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

private bool DoParseArgumentsVerbs( string[] args, object options, ref object verbInstance) { var verbs = ReflectionHelper.RetrievePropertyList<VerbOptionAttribute>(options); var helpInfo = ReflectionHelper.RetrieveMethod<HelpVerbOptionAttribute>(options); if (args.Length == 0) { if (helpInfo != null || _settings.HelpWriter != null) { DisplayHelpVerbText(options, helpInfo, null); // <= } return false; } .... } 

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ DisplayHelpVerbText рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ - helpInfo ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рддрддреНрдХрд╛рд▓реАрди рд╡рд┐рд╡рд░рдг рдХреА рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдХрд┐ рддрддреНрдХрд╛рд▓реАрди рд╢рд╛рдЦрд╛ рдХреЛ рдЪрд░ рдХреЗ рдЕрдЧрд▓реЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • helpInfo == рдЕрд╢рдХреНрдд ;
  • _settings.HelpWriter! = null ;

рдЖрдЗрдП DisplayHelpVerbText рд╡рд┐рдзрд┐ рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рджреЗрдЦреЗрдВ:

 private void DisplayHelpVerbText( object options, Pair<MethodInfo, HelpVerbOptionAttribute> helpInfo, string verb) { string helpText; if (verb == null) { HelpVerbOptionAttribute.InvokeMethod(options, helpInfo, null, out helpText); } else { HelpVerbOptionAttribute.InvokeMethod(options, helpInfo, verb, out helpText); } if (_settings.HelpWriter != null) { _settings.HelpWriter.Write(helpText); } } 

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

рдЕрдм рд╣рдо HelpVerbOptionAttribute рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЛ рджреЗрдЦреЗрдВ ред InvokeMethod рд╡рд┐рдзрд┐ред рджрд░рдЕрд╕рд▓, рдЖрдк рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкрд░ рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВ:

 internal static void InvokeMethod( object target, Pair<MethodInfo, HelpVerbOptionAttribute> helpInfo, string verb, out string text) { text = null; var method = helpInfo.Left; if (!CheckMethodSignature(method)) { throw new MemberAccessException( SR.MemberAccessException_BadSignatureForHelpVerbOptionAttribute .FormatInvariant(method.Name)); } text = (string)method.Invoke(target, new object[] { verb }); } 

helpInfo.Left рдХреЛ рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ helpInfo рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддреА рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреА, рдФрд░ рдпрд╣реА рд╣реБрдЖред

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

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╣рдо PVS-Studio рдХреА рдорджрдж рд╕реЗ PVS-Studio рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рд╣реИ "рдХреНрдпрд╛ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдвреВрдВрдврддрд╛ рд╣реИ?"ред :) рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рди рдХреЗрд╡рд▓ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдореЗрдВ, рдмрд▓реНрдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХреЛрдб рдореЗрдВ рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ - рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рд╡рд╣рд╛рдВ рднреА рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

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


All Articles