PVS-Studio рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ rdesktop рдФрд░ xrdp рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛

рдЫрд╡рд┐ 3

рдЖрд░рдбреАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдпрд╣ рджреВрд╕рд░реА рд╕рдореАрдХреНрд╖рд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рд╣рдо rdesktop рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ xrdp рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдпрд╣ рд╕реА, рд╕реА ++, рд╕реА #, рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИ, рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред

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

рдиреЛрдЯред рдлреНрд░реАрдЖрд░рдбреАрдкреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдЫрд▓рд╛ рд▓реЗрдЦ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

rdesktop


rdesktop UNIX- рдЖрдзрд╛рд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП RDP рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдПрдХ рдирд┐рдГрд╢реБрд▓реНрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк Cygwin рдХреЗ рддрд╣рдд рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред GPLv3 рдХреЗ рддрд╣рдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реИред

рдпрд╣ рдЧреНрд░рд╛рд╣рдХ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ - рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ ReactOS рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдлреНрд░рдВрдЯ-рдПрдВрдб рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рд╡рд╣ рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛ рд╣реИ: рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬрд╝ 4 рдЕрдкреНрд░реИрд▓ 2001 рдХреЛ рд╣реБрдИ рдереА - рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЙрд╕рдХреА рдЙрдореНрд░ 17 рд╡рд░реНрд╖ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рдЫреЛрдЯреА рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 30 рд╣рдЬрд╛рд░ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ, рдЬреЛ рдЕрдкрдиреА рдЙрдореНрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, FreeRDP рдореЗрдВ 320 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдпрд╣рд╛рдБ рдХреНрд▓реЙрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

Image1


рдЕрдЧрдореНрдп рдХреЛрдб


V779 рдЕрдиреБрдкрд▓рдмреНрдз рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛред rdesktop.c 1502

int main(int argc, char *argv[]) { .... return handle_disconnect_reason(deactivated, ext_disc_reason); if (g_redirect_username) xfree(g_redirect_username); xfree(g_username); } 

рддреНрд░реБрдЯрд┐ рд╣рдореЗрдВ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддреБрд░рдВрдд рдорд┐рд▓рддреА рд╣реИ: рд╣рдо рдХреЛрдб рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдмрд╛рдж рдЖрддрд╛ рд╣реИ - рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдореЗрдореЛрд░реА рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рддреНрд░реБрдЯрд┐ рдПрдХ рдЦрддрд░рд╛ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ: рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рднреА рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдХрдореА


V557 рдРрд░реЗ рдЕрдВрдбрд░рд░реВрди рд╕рдВрднрд╡ рд╣реИред 'N' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди -1 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред rdesktop.c 1872

 RD_BOOL subprocess(char *const argv[], str_handle_lines_t linehandler, void *data) { int n = 1; char output[256]; .... while (n > 0) { n = read(fd[0], output, 255); output[n] = '\0'; // <= str_handle_lines(output, &rest, linehandler, data); } .... } 

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

рдИрдУрдПрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд╛рд░ рдореЗрдВ


V739 рдИрдУрдПрдл рдХреА рддреБрд▓рдирд╛ 'рдЪрд╛рд░' рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдирд╣реАрдВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред '(C = fgetc (fp))' 'int' рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред ctrl.c 500

 int ctrl_send_command(const char *cmd, const char *arg) { char result[CTRL_RESULT_SIZE], c, *escaped; .... while ((c = fgetc(fp)) != EOF && index < CTRL_RESULT_SIZE && c != '\n') { result[index] = c; index++; } .... } 

рдпрд╣рд╛рдБ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЧрд▓рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ: рдЕрдЧрд░ fgetc рдПрдХ рд╡рд░реНрдг рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдХреЛрдб 0xFF рд╣реИ, рддреЛ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд ( EOF ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рдПрдЧрд╛ред

EOF рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдорддреМрд░ рдкрд░ -1 рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CP1251 рдХреЛрдбрд┐рдВрдЧ рдореЗрдВ, рд░реВрд╕реА рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдЕрдВрддрд┐рдо рдЕрдХреНрд╖рд░ рдореЗрдВ 0xFF рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдирдВрдмрд░ -1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдЯрд╛рдЗрдк рдЪрд░ рдХреЗ рдПрдХ рдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ EOF (-1) рдХреА рддрд░рд╣ рд╡рд░реНрдг 0xFF рдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, fgetc рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЕрдВрддрд░ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╢реБрджреНрдзрд┐рдкрддреНрд░


рдЯреБрдХрдбрд╝рд╛ рдХрд░рдирд╛ рез

V547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд░рд╛рдЗрдЯ_рдЯрд╛рдЗрдо' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реЛрддреА рд╣реИред disk.c 805

 RD_NTSTATUS disk_set_information(....) { time_t write_time, change_time, access_time, mod_time; .... if (write_time || change_time) mod_time = MIN(write_time, change_time); else mod_time = write_time ? write_time : change_time; // <= .... } 

рд╢рд╛рдпрдж рдЗрд╕ рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ || рдФрд░ && рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдФрд░ change_time :

  • рджреЛрдиреЛрдВ рдЪрд░ 0 рд╣реИрдВ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ: mod_time рдЪрд░ рд╣рдореЗрд╢рд╛ 0 рд╣реЛрдЧрд╛ рдЪрд╛рд╣реЗ рд╡рд╣ рдирд┐рдореНрди рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╣реЛред
  • рдЪрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ 0 рд╣реИ: mod_time 0 рд╣реЛрдЧрд╛ (рдмрд╢рд░реНрддреЗ рдХрд┐ рджреВрд╕рд░реЗ рдЪрд░ рдХрд╛ рдПрдХ рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рд╣реЛ), рдХреНрдпреЛрдВрдХрд┐ MIN рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛ред
  • рджреЛрдиреЛрдВ рдЪрд░ 0 рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИрдВ: рд╣рдо рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред

рдЬрдм рдПрдХ рд╢рд░реНрдд рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде write_time && change_time, рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рд▓рдЧреЗрдЧрд╛:
  • рдПрдХ рдпрд╛ рджреЛрдиреЛрдВ рд╡реИрд░рд┐рдПрдмрд▓ 0 рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИрдВ: рдиреЙрдирдЬрд╝рд░реЛ рд╡реИрд▓реНрдпреВ рдЪреБрдиреЗрдВред
  • рджреЛрдиреЛрдВ рдЪрд░ 0 рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИрдВ: рд╣рдо рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред

рдЯреБрдХрдбрд╝рд╛ рдХрд░рдирд╛ реи

V547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реИред рд╕рдВрднрд╡рддрдГ '&&' рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдбрд┐рд╕реНрдХред резрекрез реп

 static RD_NTSTATUS disk_device_control(RD_NTHANDLE handle, uint32 request, STREAM in, STREAM out) { .... if (((request >> 16) != 20) || ((request >> 16) != 9)) return RD_STATUS_INVALID_PARAMETER; .... } 

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдСрдкрд░реЗрдЯрд░реЛрдВ || рдФрд░ && , рдпрд╛ рддреЛ == рдФрд░ ! = : рдЪрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ 20 рдФрд░ 9 рдорд╛рди рдирд╣реАрдВ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред

рдЕрд╕реАрдорд┐рдд рд▓рд╛рдЗрди рдХреА рдирдХрд▓


V512 ' рд╕реНрдкреНрд░рд┐рдВрдЯрдл ' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЙрд▓ рд╕реЗ рдмрдлрд░ 'рдлрд╝реБрд▓рдкреИрде' рдХрд╛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реЛрдЧрд╛ред disk.c 1257

 RD_NTSTATUS disk_query_directory(....) { .... char *dirname, fullpath[PATH_MAX]; .... /* Get information for directory entry */ sprintf(fullpath, "%s/%s", dirname, pdirent->d_name); .... } 

рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рд▓рд╛рдкрд░рд╡рд╛рд╣ рдкрд░рд┐рд╡рд░реНрддрди, рдФрд░ рд╣рдо рдПрдХ рдмрдлрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ - рд╕реНрдкреНрд░рд┐рдВрдЯрдл рдХреБрдЫ рднреА рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдкрде рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдП, рд╣рдо рд╕рд░рдгреА рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдХреЙрд▓ рдХреЛ snprintf (fullpath, PATH_MAX, ....) рдкрд░ рдиреЛрдЯрд┐рд╕ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИред

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


V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ: Add> 0. scard.c 507

 static void inRepos(STREAM in, unsigned int read) { SERVER_DWORD add = 4 - read % 4; if (add < 4 && add > 0) { .... } } 

рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ > 0 рдмреЗрдХрд╛рд░ рд╣реИ: рдЪрд░ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрдврд╝рд╛ 4% рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╢реЗрд╖ рдХреЛ рд▓реМрдЯрд╛ рджреЗрдЧрд╛, рдФрд░ рдпрд╣ рдХрднреА рднреА 4 рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

xrdp


xrdp рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд RDP рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ:

  • xrdp - рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдЕрдкрд╛рдЪреЗ 2.0 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  • xorgxrdp - xrdp рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП Xorg рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред рд▓рд╛рдЗрд╕реЗрдВрд╕ - X11 (рдПрдордЖрдИрдЯреА рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдЬреНрдЮрд╛рдкрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз)

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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо xorgxrdp рдкрд░ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рдкрд┐рдЫрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рддрд░рд╣, xrdp рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рдЫреЛрдЯреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд▓рдЧрднрдЧ 80 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред

Image2


рдЕрдзрд┐рдХ рдЯрд╛рдЗрдкреЛ


V525 рдХреЛрдб рдореЗрдВ рд╕рдорд╛рди рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрддрд╛ рд╣реИред 87, 88, 89 рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ 'r', 'g', 'r' рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред rxxencode_rgb_to_yuv.c 87

 static int rfx_encode_format_rgb(const char *rgb_data, int width, int height, int stride_bytes, int pixel_format, uint8 *r_buf, uint8 *g_buf, uint8 *b_buf) { .... switch (pixel_format) { case RFX_FORMAT_BGRA: .... while (x < 64) { *lr_buf++ = r; *lg_buf++ = g; *lb_buf++ = r; // <= x++; } .... } .... } 

рдпрд╣ рдХреЛрдб librfxcodec рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдХрд┐ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RemoteFX рдХреЗ рд▓рд┐рдП jpeg2000 рдХреЛрдбреЗрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдЧреНрд░рд╛рдлрд┐рдХ рдбреЗрдЯрд╛ рдЪреИрдирд▓реЛрдВ рдХреЛ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - "рдиреАрд▓рд╛" рд░рдВрдЧ рдХреЗ рдмрдЬрд╛рдп, "рд▓рд╛рд▓" рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдРрд╕реА рддреНрд░реБрдЯрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред

рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ rfx_encode_format_argb рдХреЗ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЧрд┐рд░ рдЧрдИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рд╣рдореЗрдВ рдмрддрд╛рдпрд╛:

V525 рдХреЛрдб рдореЗрдВ рд╕рдорд╛рди рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрддрд╛ рд╣реИред рдЖрдЗрдЯрдо 'a', 'r', 'g', 'r' рдХреЛ рд▓рд╛рдЗрдиреЛрдВ 260, 261, 262, 263 рдкрд░ рдЬрд╛рдВрдЪреЗрдВред rfxencode_rgb_to_yuv.c 260

 while (x < 64) { *la_buf++ = a; *lr_buf++ = r; *lg_buf++ = g; *lb_buf++ = r; x++; } 

рдРрд▓рд╛рди рдХреА рдШреЛрд╖рдгрд╛


V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'I - 8' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди 129 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред genkeymap.c 142

 // evdev-map.c int xfree86_to_evdev[137-8+1] = { .... }; // genkeymap.c extern int xfree86_to_evdev[137-8]; int main(int argc, char **argv) { .... for (i = 8; i <= 137; i++) /* Keycodes */ { if (is_evdev) e.keycode = xfree86_to_evdev[i-8]; .... } .... } 

рдЗрди рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рд░рдгреА рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдЕрд╕рдВрдЧрдд рд╣реИ - рдЖрдХрд╛рд░ рдореЗрдВ 1. рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - рд╕рд╣реА рдЖрдХрд╛рд░ рдИрд╡рд╛рджреЗрд╡-рдореИрдкрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рджреЛрд╖ рд╣реИ рдЬрд┐рд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдЕрд╡реИрдз рддреБрд▓рдирд╛


V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ: (cap_len <0)ред xrdp_caps.c 616

 // common/parse.h #if defined(B_ENDIAN) || defined(NEED_ALIGN) #define in_uint16_le(s, v) do \ .... #else #define in_uint16_le(s, v) do \ { \ (v) = *((unsigned short*)((s)->p)); \ (s)->p += 2; \ } while (0) #endif int xrdp_caps_process_confirm_active(struct xrdp_rdp *self, struct stream *s) { int cap_len; .... in_uint16_le(s, cap_len); .... if ((cap_len < 0) || (cap_len > 1024 * 1024)) { .... } .... } 

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

рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдБрдЪ


V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ: (bpp! = 16)ред libxrdp.c 704

 int EXPORT_CC libxrdp_send_pointer(struct xrdp_session *session, int cache_idx, char *data, char *mask, int x, int y, int bpp) { .... if ((bpp == 15) && (bpp != 16) && (bpp != 24) && (bpp != 32)) { g_writeln("libxrdp_send_pointer: error"); return 1; } .... } 

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

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


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

рдЖрдк рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



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

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


All Articles