рд╣рдо рдкреИрд░ рдореЗрдВ рдЧреЛрд▓реА рдорд╛рд░рддреЗ рд╣реИрдВ, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ


рдЖрдЬ рдХреЗ рд▓реЗрдЦ рдореЗрдВ рд▓рд┐рдВрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдпрд╣ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдПрдХ рд╣реА рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд░реБрдЪрд┐ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдорд╛рдирд╛ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддреА рд╣реИрдВ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ (рд╕реАрд╡реАрдИ) рд╣реЛрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдо рд╕реБрд░рдХреНрд╖рд╛ рджреЛрд╖реЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдереЛрдбрд╝реА рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


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

  • рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрдЯрдбрд┐рди рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ;
  • рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреА рд╕рдлрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ;
  • рдпрджрд┐ рдбреЗрдЯрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдХреИрд░рдХреНрдЯрд░ рдХреЛ рд▓рд╛рдЗрди рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

рдмреЗрд╢рдХ, рдПрдХ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдвреВрдВрдврдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЦреЛрдЬ рдХрд░рдирд╛ рдФрд░ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд╢реА рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реНрддрд░ рд╣реИред :)

Freeswitch


рдкрд╣рд▓рд╛ рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ fs_cli.exe рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреЛрдб рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛, рдЬреЛ FreeSWITCH рд╡рд┐рддрд░рдг рдХрд┐рдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:

static const char *basic_gets(int *cnt) { .... int c = getchar(); if (c < 0) { if (fgets(command_buf, sizeof(command_buf) - 1, stdin) != command_buf) { break; } command_buf[strlen(command_buf)-1] = '\0'; /* remove endline */ break; } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V1010 CWE-20 рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рджрд╛рдЧреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'strlen (рдХрдорд╛рдВрдб_рдмреНрдпреВрдл)'ред

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдХреЙрд▓ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрдорд╛рдВрдб_рдмреНрдпреВ рд╕рд░рдгреА рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрджрд┐рдЧреНрдз рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рд╣рд░реА - рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрдЯрдбрд┐рди рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдлрд┐рдЯреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЕрд╕рддреНрдпрд╛рдкрд┐рдд - рдЪреВрдВрдХрд┐ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рдХрдорд╛рдВрдб_рдмреНрдпреВрдл, ....)! = Command_buf рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рд╣рдо рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрдереНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдирд╣реАрдВред

рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐, рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рд╕рд░рдгреА рдХреЗ рдмрд╛рд╣рд░ '\ 0' рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ (рд╕реА рднрд╛рд╖рд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ) рджрд░реНрдЬ рдХрд░реЗрдВ, рдЕрд░реНрдерд╛рдд, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рд╡рд░реНрдг '\ 0' рд╣реЛрдЧрд╛ред

рдЪрд▓рд┐рдП рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрдирдкреБрдЯ рдореЗрдВ рдПрдХ рд╢реВрдиреНрдп-рд▓рдВрдмрд╛рдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

  • fgets (рдХрдорд╛рдВрдб_рдмреБрдл, ....) -> рдХрдорд╛рдВрдб_рдмреБрдл ;
  • fgets (....)! = command_buf -> false ( рдлрд┐рд░ рдпрджрд┐ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рд╢рд╛рдЦрд╛ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ);
  • strlen (command_buf) -> 0 ;
  • command_buf [strlen (рдХрдорд╛рдВрдб_buf) - 1] -> command_buf [-1] ред

рдКрдкреНрд╕!

рдпрд╣рд╛рдВ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА "рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдорд╣рд╕реВрд╕ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред" рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд╛рдУ;
  • рдареАрдХ-рдареАрдХ рдЗрдирдкреБрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЧреЗрдЯрдЪреЗрдпрд░ () рдХреЙрд▓ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рд▓реМрдЯрд╛рдП;
  • рдлрд╝рд┐рдЬрд╝ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рд╢реБрд░реВ рдореЗрдВ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реНрд░реЛрдд рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд░рдо, рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдпрд╛:

  • рдмреИрдЪ рдореЛрдб рдореЗрдВ fs_cli.exe рдЪрд▓рд╛рдПрдВ ( fs_cli.exe -b )ред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдЧреЗ рдХреЗ рдЪрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП fs_cli.exe рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, FreeSwitchConsole.exe рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
  • рд╣рдо рдЗрдирдкреБрдЯ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЧреЗрдЯрдЪреЗрдпрд░ () рдХреЙрд▓ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рд▓реМрдЯрд╛рдПред
  • рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рджрд░реНрдЬ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, '\ 0 рдУрд╣реНрд╕')ред
  • ....
  • рд▓рд╛рдн!

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдмреИрдХ рд╣реИ:


NcFTP


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

 static int NcFTPConfirmResumeDownloadProc(....) { .... if (fgets(newname, sizeof(newname) - 1, stdin) == NULL) newname[0] = '\0'; newname[strlen(newname) - 1] = '\0'; .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V1010 CWE-20 рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рджрд╛рдЧреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'strlen (newname)'ред

рдпрд╣рд╛рдВ, FreeSWITCH рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЛрдб рдХреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрджрддрд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, '\ 0' рд▓рд┐рдЦрдирд╛ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд░реАрдб рдлреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рдерд╛ рдпрд╛ рдирд╣реАрдВред рдпрд╣реА рд╣реИ, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдХреЛ рдХреИрд╕реЗ рддреЛрдбрд╝рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред рдЪрд▓реЛ рдПрдХ рд╕рд┐рджреНрдз рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ - рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред

рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рд╕рдорд╕реНрдпрд╛ FreeSWITCH рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдЪрд░рдгреЛрдВ рдХрд╛ рдХреНрд░рдо рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИ:

  • рд╕рд░реНрд╡рд░ рд╕реЗ рд╢реБрд░реВ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ speedtest.tele2.net рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдЕрдВрдд рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрдорд╛рдВрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: ncftp.exe speedtest.tele2.net );
  • рд╕рд░реНрд╡рд░ рд╕реЗ рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ред рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ, рдПрдХ рд╣реА рдирд╛рдо рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрдорд╛рдВрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 512KB.zip рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ );
  • рдЪрд░рд┐рддреНрд░ 'рдПрди' рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдм рдЪрд▓реЛ рдХреБрдЫ рдордЬрд╝рд╛ рд╣реИ );
  • '\ 0' рджрд░реНрдЬ рдХрд░реЗрдВ (рдпрд╛ рдХреБрдЫ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк);
  • ....
  • рд▓рд╛рдн!

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреНрд░рдЬрдирди рд╡реАрдбрд┐рдпреЛ рдкрд░ рднреА рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


OpenLDAP


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

рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ:

 int main( int argc, char **argv ) { char buf[ 4096 ]; FILE *fp = NULL; .... if (....) { fp = stdin; } .... if ( fp == NULL ) { .... } else { while ((rc == 0 || contoper) && fgets(buf, sizeof(buf), fp) != NULL) { buf[ strlen( buf ) - 1 ] = '\0'; /* remove trailing newline */ if ( *buf != '\0' ) { rc = dodelete( ld, buf ); if ( rc != 0 ) retval = rc; } } } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V1010 CWE-20 рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рджрд╛рдЧреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'strlen (buf')ред

рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдП:

 while (.... && fgets(buf, sizeof(buf), fp) != NULL) { buf[ strlen( buf ) - 1 ] = '\0'; .... } 

рдпрд╣ рдХреЛрдб NcFTP рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдкрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ:

  • fgets (buf, ....) -> buf ;
  • fgets (....)! = NULL -> рд╕рдЪ ( рдЬрдмрдХрд┐ рд▓реВрдк рдХрд╛ рд╢рд░реАрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ);
  • strlen (buf) - 1 -> 0 - 1 -> -1 ;
  • buf [-1] = '\ 0' ред

libidn


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ (рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ "рдЫреБрдЖ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ" (рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдореИрдВ OpenLDAP рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛)), рдЙрдиреНрд╣реЗрдВ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕реАрд╡реАрдИ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред

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

рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ:

 int main (int argc, char *argv[]) { .... else if (fgets (readbuf, BUFSIZ, stdin) == NULL) { if (feof (stdin)) break; error (EXIT_FAILURE, errno, _("input error")); } if (readbuf[strlen (readbuf) - 1] == '\n') readbuf[strlen (readbuf) - 1] = '\0'; .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V1010 CWE-20 рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рджрд╛рдЧреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'strlen (readbuf)'ред

рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕ -1 рдореЗрдВ рдХреА рдЧрдИ рдереА , рдпрд╣рд╛рдВ рд░реАрдбрд┐рдВрдЧ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрднреА рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ CVE рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ ( CVE-2015-8948 ) рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред

рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕ рдХреЛрдб рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рд╛ рдЧрдпрд╛:

 int main (int argc, char *argv[]) { .... else if (getline (&line, &linelen, stdin) == -1) { if (feof (stdin)) break; error (EXIT_FAILURE, errno, _("input error")); } if (line[strlen (line) - 1] == '\n') line[strlen (line) - 1] = '\0'; .... } 

рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ? рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред рдирдИ рднреЗрджреНрдпрддрд╛, рд╕рдВрдмрдВрдзрд┐рдд CVE рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛: CVE-2016-6262 ред

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V1010 CWE-20 рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рджрд╛рдЧреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'рд╕реНрдЯреНрд░рд▓реЗрди (рд▓рд╛рдЗрди)'ред

рдПрдХ рдФрд░ рдкреНрд░рдпрд╛рд╕ рдкрд░, рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝рдХрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 if (strlen (line) > 0) if (line[strlen (line) - 1] == '\n') line[strlen (line) - 1] = '\0'; 

рдЖрдЗрдП рддрд╛рд░реАрдЦреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред 'рдХреНрд▓реЛрдЬрд┐рдВрдЧ' CVE-2015-8948 - 08/10/2015 рд╕реАрд╡реАрдИ-2016-62-62 - 01/14/2016 рдХреЛ рдмрдВрдж рдХрд░реЗрдВред рдпрд╣реА рд╣реИ, рдЙрдкрд░реЛрдХреНрдд рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ 5 рдорд╣реАрдиреЗ рд╣реИ ! рдпрд╣рд╛рдБ рдЖрдкрдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдРрд╕реЗ рд▓рд╛рдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рд╣реИ ...

рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╕реБрд░рдХреНрд╖рд╛


рдХреЛрдИ рдФрд░ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдВрдХрдбрд╝реЗ рдФрд░ рддрд░реНрдХред рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд▓реЗрдЦрдХ рдХреА рд░рд╛рдп рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╛рдардХ рдХреА рд░рд╛рдп рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддреА рд╣реИред

рдиреЛрдЯред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдФрд░ рд▓реЗрдЦ рдкрдврд╝реЗрдВ - " рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? "ред рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреЛ рд╕рд░рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЙрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХреА рдФрд░ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рд╣реИ рдпрджрд┐ рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рд╖рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВред

рдЖрдЗрдП рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ 10 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЦреЛрдЬреА рдЧрдИ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рджреЗрдЦреЗрдВред рдореИрдВрдиреЗ рд╕реАрд╡реАрдИ рд╡рд┐рд╡рд░рдг рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рд▓рд┐рдпрд╛ред

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



рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд┐рддрд┐ рд╣реИред 2014 рддрдХ, рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╕реАрд╡реАрдИ рдХреА рд╕рдВрдЦреНрдпрд╛ 6,000 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рдирд┐рд╢рд╛рди рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдереА, рдФрд░ рдЗрд╕рд╕реЗ рд╢реБрд░реВ - рдпрд╣ рдиреАрдЪреЗ рдирд╣реАрдВ рдЧрд┐рд░рд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, 2017 рдХреЗ рд▓рд┐рдП рдЖрдВрдХрдбрд╝реЗ рд╣реИрдВ - рдкреВрд░реНрдг рдиреЗрддрд╛ (14,714 рдЗрдХрд╛рдЗрдпрд╛рдВ)ред рд╡рд░реНрддрдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ - 2018 - рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрднреА рддрдХ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рд┐рдХреЙрд░реНрдб рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ - 15,310 рдЗрдХрд╛рдЗрдпрд╛рдВред

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдирдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЫрд▓рдиреА рдХреА рддрд░рд╣ рдЫреЗрдж рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВ? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛, рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИ:

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

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

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

  • рдмрд╛рд╣рд░реА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдВрд╡реЗрджрдирд╢реАрд▓;
  • рдЙрди "рд╕рдЬреНрдЬрдиреЛрдВ" рджреНрд╡рд╛рд░рд╛ "рдЬрд╛рдВрдЪ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкреНрд░рд╡рдг рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд╢реЛрд╖рдг рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЫреЗрдж рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢реБрднрдЪрд┐рдВрддрдХ рдЖрдкрдХреА рдЕрдзрд┐рдХ рдорджрдж рдХрд░ рдкрд╛рдПрдВрдЧреЗред

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХреЗ рддрд╣рдд рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмрд╕ рдЙрдЪрд┐рдд рдЧреБрдгрд╡рддреНрддрд╛ / рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВред

рдХреНрдпрд╛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдРрд╕рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд╛рдп рд╣реИ? рд╣рд╛рдВред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрди рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ (рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ) рдХрд┐ рдХрдИ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдХрд╛рдлреА рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдШрдЯрдирд╛ рдорд╛рдирддреЗ рд╣реИрдВред рд╣рд╛рдБ рдФрд░ рдирд╣реАрдВред рд╕рд░рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреЛрдб рд╕рдорд╕реНрдпрд╛рдПрдВ рднреА рдЧрдВрднреАрд░ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдлрд┐рд░, рдЗрд╕ рддрд░рд╣ рдХреА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ ред 'рд╕рд░рд▓' рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдХрдо рдордд рд╕рдордЭрдирд╛ред

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


рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд┐ рдХреНрдпрд╛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдкреНрд░рдЪрд╛рд░ рд╕рд┐рд░реНрдл рдкреНрд░рдЪрд╛рд░ рд╣реИ, рдпрд╛ рдпрджрд┐ рд╕рдорд╕реНрдпрд╛ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░реЗрдВред

рдореЗрд░реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рджреЗрддрд╛, рдЕрдЧрд░ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдСрд▓ рдж рдмреЗрд╕реНрдЯ!



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

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


All Articles