
RDP เดชเตเดฐเตเดเตเดเตเดเตเดเตเดณเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดชเตเดชเตบ เดธเตเดดเตโเดธเต เดชเตเดฐเตเดเตเดฐเดพเดฎเตเดเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดฒเตเดเดจเดเตเดเดณเตเดเต เดชเดฐเดฎเตเดชเดฐเดฏเดฟเดฒเต เดฐเดฃเตเดเดพเดฎเดคเตเดคเต เด
เดตเดฒเตเดเดจเดฎเดพเดฃเดฟเดคเต. เด
เดคเดฟเตฝ เดจเดฎเตเดฎเตพ rdesktop เดเตเดฒเดฏเดจเตเดฑเตเด xrdp เดธเตเตผเดตเดฑเตเด เดจเตเดเตเดเตเด.
เดชเดฟเดถเดเตเดเตพ เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฐเต เดเดชเดเดฐเดฃเดฎเดพเดฏเดฟ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต เดเดคเต เดธเดฟ, เดธเดฟ++, เดธเดฟ#, เดเดพเดต เดเดจเตเดจเดฟเดตเดฏเตโเดเตเดเดพเดฏเตเดณเตเดณ เดเดฐเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเดเต เดเตเดกเต เด
เดจเดฒเตเดธเดฑเดพเดฃเต, เดชเตเดฒเดพเดฑเตเดฑเตโเดซเตเดฎเตเดเดณเดฟเตฝ เดฒเดญเตเดฏเดฎเดพเดฃเต. Windows, Linux ะธ macOS.
เดเดจเดฟเดเตเดเต เดฐเดธเดเดฐเดฎเดพเดฏเดฟ เดคเตเดจเตเดจเดฟเดฏ เดคเตเดฑเตเดฑเตเดเตพ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดฒเตเดเดจเด เด เดตเดคเดฐเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดชเตเดฐเตเดเดเตเดฑเตเดฑเตเดเตพ เดเตเดฑเตเดคเดพเดฃเต, เด เดคเดฟเดจเดพเตฝ เดเตเดฑเดเตเดเต เดคเตเดฑเตเดฑเตเดเตพ เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต :).
เด เดญเดฟเดชเดพเดฏเดชเตเดชเตเดเตเด. FreeRDP เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดชเดฐเดฟเดถเตเดงเดจเดฏเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดเดฐเต เดฎเตเตป เดฒเตเดเดจเด เดเดพเดฃเดพเด .
rdesktop
โ UNIX-เด เดงเดฟเดทเตเด เดฟเดค เดธเดฟเดธเตเดฑเตเดฑเดเตเดเตพเดเตเดเดพเดฏเตเดณเตเดณ RDP เดเตเดฒเดฏเดจเตเดฑเดฟเดจเตเดฑเต เดธเตเดเดจเตเดฏ เดจเดเดชเตเดชเดพเดเตเดเตฝ. เดเดคเต เดคเดพเดดเตเดฏเตเด เดเดชเดฏเตเดเดฟเดเตเดเดพเด Windows, เดจเดฟเดเตเดเตพ เดธเดฟเดเตโเดตเดฟเดจเต เดเตเดดเดฟเตฝ เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ. GPLv3 เดชเตเดฐเดเดพเดฐเด เดฒเตเดธเตปเดธเต เดเตเดฏเตโเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
เด เดเตเดฒเดฏเดจเตเดฑเต เดตเดณเดฐเต เดเดจเดชเตเดฐเดฟเดฏเดฎเดพเดฃเต - เดเดคเต ReactOS-เตฝ เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต, เดเตเดเดพเดคเต เดจเดฟเดเตเดเตพเดเตเดเต เด เดคเดฟเดจเดพเดฏเดฟ เดฎเตเดจเตเดจเดพเด-เดเดเตเดทเดฟ เดเตเดฐเดพเดซเดฟเดเตเดเตฝ เดซเตเดฐเดฃเตเดเต-เดเตปเดกเตเดเดณเตเด เดเดฃเตเดเตเดคเตเดคเดพเดจเดพเดเตเด. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เด เดฆเตเดฆเตเดนเดคเตเดคเดฟเดจเต เดชเตเดฐเดพเดฏเดฎเตเดฃเตเดเต: เด เดฆเตเดฆเตเดนเดคเตเดคเดฟเดจเตเดฑเต เดเดฆเตเดฏ เดฑเดฟเดฒเตเดธเต 4 เดเดชเตเดฐเดฟเตฝ 2001 เดจเต เดจเดเดจเตเดจเต - เดเดดเตเดคเตเดฎเตเดชเตเตพ, เด เดฆเตเดฆเตเดนเดคเตเดคเดฟเดจเต 17 เดตเดฏเดธเตเดธเดพเดฏเดฟเดฐเตเดจเตเดจเต.
เดเดพเตป เดจเตเดฐเดคเตเดคเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเดคเตเดชเตเดฒเต, เดชเดฆเตเดงเดคเดฟ เดตเดณเดฐเต เดเตเดฑเตเดคเดพเดฃเต. เด เดคเดฟเตฝ เดเดเดฆเตเดถเด 30 เดเดฏเดฟเดฐเด เดเตเดกเต เดฒเตเดจเตเดเตพ เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เดเดคเต เด เดคเดฟเดจเตเดฑเต เดชเตเดฐเดพเดฏเด เดเดฃเดเตเดเดฟเดฒเตเดเตเดเตเดเตเดฎเตเดชเตเตพ เด เตฝเดชเตเดชเด เดตเดฟเดเดฟเดคเตเดฐเดฎเดพเดฃเต. เดคเดพเดฐเดคเดฎเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ, FreeRDP-เดฏเดฟเตฝ 320 เดเดฏเดฟเดฐเด เดฒเตเดจเตเดเตพ เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเตเดฒเตเดเตเดเต เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเดจเตเดฑเต เดเดเตเดเตเดชเตเดเตเดเต เดเดคเดพ:

เดเดคเตเดคเดฟเดเตเดเตเดฐเดพเดจเดพเดเดพเดคเตเดค เดเตเดกเต
เดฒเดญเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดค เดเตเดกเต เดเดฃเตเดเตเดคเตเดคเดฟ. เดเดฐเต เดชเดฟเดถเดเต เดเดฃเตเดเดพเดเดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดเต. 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);
}เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เดชเดฟเดถเดเต เดเดเตเดเดณเต เดเดเตป เดจเตเดฐเดฟเดเตเดจเตเดจเต เดชเตเดฐเดงเดพเดจ: เดเดชเตเดชเดฑเตเดฑเตเดฑเดฑเดฟเดจเต เดถเตเดทเด เดเตเดกเต เดตเดฐเตเดจเตเดจเดคเต เดเดเตเดเตพ เดเดพเดฃเตเดจเตเดจเต เดฎเดเดเตเดเด - เด เดถเดเดฒเด เดฎเตเดฎเตเดฎเดฑเดฟ เดเตเดฒเตเดจเดฟเดเดเต เดจเดเดคเตเดคเตเดจเตเดจเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดชเดฟเดถเดเต เดเดฐเต เดญเตเดทเดฃเดฟ เดเดฏเตผเดคเตเดคเตเดจเตเดจเดฟเดฒเตเดฒ: เดชเตเดฐเตเดเตเดฐเดพเด เดชเตเดฑเดคเตเดคเตเดเดเดจเตเดจเดคเดฟเดจเต เดถเตเดทเด เด เดจเตเดตเดฆเดฟเดเตเด เดเดฒเตเดฒเดพ เดฎเตเดฎเตเดฎเดฑเดฟเดฏเตเด เดเดชเตเดชเดฑเตเดฑเตเดฑเดฟเดเดเต เดธเดฟเดธเตเดฑเตเดฑเด เดฎเดพเดฏเตโเดเตเดเตเด.
เดชเดฟเดถเดเต เดเตเดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเตฝ เดเดฒเตเดฒ
เด เดฑเต เด เดฃเตเดเตผเดฑเตบ เดธเดพเดงเตเดฏเดฎเดพเดฃเต. '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] = ' '; // <=
str_handle_lines(output, &rest, linehandler, data);
}
....
}เด เดเตเดธเดฟเดฒเต เดเตเดกเต เดธเตโเดจเดฟเดชเตเดชเตเดฑเตเดฑเต เดซเดฏเตฝ เด เดตเดธเดพเดจเดฟเดเตเดเตเดจเตเดจเดคเต เดตเดฐเต เดซเดฏเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เดฌเดซเดฑเดฟเดฒเตเดเตเดเต เดฑเตเดกเต เดเตเดฏเตเดฏเตเดจเตเดจเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดเดตเดฟเดเต เดชเดฟเดถเดเต เดเตเดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒ: เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดคเตเดฑเตเดฑเต เดธเดเดญเดตเดฟเดเตเดเดพเตฝ, เดชเดฟเดจเตเดจเต เดตเดพเดฏเดฟเดเตเดเตเด -1 เดคเดฟเดฐเดฟเดเต เดจเตฝเดเตเด, เดคเตเดเตผเดจเตเดจเต เด เดฑเต เดฎเดฑเดฟเดเดเดเตเดเตเด เดเดเตเดเตเดชเตเดเตเดเต.
เดเดพเตผ เดคเดฐเดคเตเดคเดฟเตฝ EOF เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต
EOF-เดจเต 'char' เดคเดฐเด เดฎเตเดฒเตเดฏเดตเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเด เดเตเดฏเตเดฏเดพเตป เดชเดพเดเดฟเดฒเตเดฒ. '(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++;
}
....
}เดซเดฏเดฒเดฟเดจเตเดฑเต เด เดตเดธเดพเดจเดคเตเดคเดฟเตฝ เดเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดฑเต เดคเตเดฑเตเดฑเดพเดฏ เดเตเดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเตฝ เดเดตเดฟเดเต เดเดพเดฃเดพเด: if fgetc 0xFF เดเตเดกเต เดเดณเตเดณ เดเดฐเต เดชเตเดฐเดคเตเดเด เดจเตฝเดเตเดจเตเดจเต, เด เดคเต เดซเดฏเดฒเดฟเดจเตเดฑเต เด เดตเดธเดพเดจเดฎเดพเดฏเดฟ เดตเตเดฏเดพเดเตเดฏเดพเดจเดฟเดเตเดเดชเตเดชเตเดเตเด (EOF).
EOF เดเดคเต เดเดฐเต เดธเตเดฅเดฟเดฐเดพเดเตเดเดฎเดพเดฃเต, เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ -1 เดเดฏเดฟ เดจเดฟเตผเดตเดเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, CP1251 เดเตปเดเตเดกเดฟเดเดเดฟเตฝ, เดฑเดทเตเดฏเตป เด เดเตเดทเดฐเดฎเดพเดฒเดฏเตเดเต เด เดตเดธเดพเดจ เด เดเตเดทเดฐเดคเตเดคเดฟเดจเต 0xFF เดเดจเตเดจ เดเตเดกเต เดเดฃเตเดเต, เดเดคเต เดจเดฎเตเดฎเตพ เดเดฐเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเดพเดฃเต เดธเดเดธเดพเดฐเดฟเดเตเดเตเดจเตเดจเดคเตเดเตเดเดฟเตฝ -1 เดเดจเตเดจ เดธเดเดเตเดฏเดฏเตเดฎเดพเดฏเดฟ เดฏเตเดเดฟเดเตเดเตเดจเตเดจเต. เดชเตเดฐเดคเตเดเด. เดเดฟเดนเตเดจเด 0xFF เดชเตเดฒเตเดฏเดพเดฃเตเดจเตเดจเต เดเดคเต เดฎเดพเดฑเตเดจเตเดจเต EOF (-1) เดซเดฏเดฒเดฟเดจเตเดฑเต เด เดตเดธเดพเดจเดฎเดพเดฏเดฟ เดตเตเดฏเดพเดเตเดฏเดพเดจเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต. เด เดคเตเดคเดฐเด เดชเดฟเดถเดเตเดเตพ เดเดดเดฟเดตเดพเดเตเดเดพเตป, เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต เดซเดฒเด fgetc เดชเตเดฒเตเดณเตเดณ เดเดฐเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเตฝ เดธเตเดเตเดทเดฟเดเตเดเดฃเด int.
เด เดเตเดทเดฐเดคเตเดคเตเดฑเตเดฑเตเดเตพ
เดถเดเดฒเด 1
'write_time' เดเดจเตเดจ เดชเตเดฐเดฏเตเดเด เดเดชเตเดชเตเดดเตเด เดคเตเดฑเตเดฑเดพเดฃเต. 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; // <=
....
}เดเดฐเตเดชเดเตเดทเต เด เดเตเดกเดฟเดจเตเดฑเต เดฐเดเดฏเดฟเดคเดพเดตเต เดคเตเดฑเตเดฑเดฟเดฆเตเดงเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเดพเด || ะธ && เด เดตเดธเตเดฅเดฏเดฟเดฒเดพเดฃเต. เดฎเตเดฒเตเดฏเดเตเดเตพเดเตเดเตเดณเตเดณ เดธเดพเดงเตเดฏเดฎเดพเดฏ เดเดชเตเดทเดจเตเดเตพ เดจเดฎเตเดเตเดเต เดชเดฐเดฟเดเดฃเดฟเดเตเดเดพเด เดเดดเตเดคเตเด_เดธเดฎเดฏเด ะธ เดฎเดพเดฑเตเดฑเด_เดธเดฎเดฏเด:
- เดฐเดฃเตเดเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเดณเตเด 0 เดจเต เดคเตเดฒเตเดฏเดฎเดพเดฃเต: เด เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ เดจเดฎเตเดฎเตพ เดเดฐเต เดถเดพเดเดฏเดฟเตฝ เด เดตเดธเดพเดจเดฟเดเตเดเตเด เดฎเดฑเตเดฑเดพเดฐเตเดเตเดเดฟเดฒเตเด: เดตเตเดฐเดฟเดฏเดฌเดฟเตพ เดฎเตเดกเต_เดเตเด เดคเตเดเตผเดจเตเดจเตเดณเตเดณ เด เดตเดธเตเดฅ เดชเดฐเดฟเดเดฃเดฟเดเตเดเดพเดคเต เดเดชเตเดชเตเดดเตเด 0 เดเดฏเดฟเดฐเดฟเดเตเดเตเด.
- เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเดณเดฟเดฒเตเดจเตเดจเต 0 เดเดฃเต: เดฎเตเดกเต_เดเตเด 0 เดจเต เดคเตเดฒเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเดเตเดเตเด (เดฎเดฑเตเดฑเตเดฐเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเต เดจเตเดเดฑเตเดฑเตเดตเต เด เดฒเตเดฒเดพเดคเตเดค เดฎเตเดฒเตเดฏเดฎเตเดฃเตเดเตเดเตเดเดฟเตฝ), เดเดพเดฐเดฃเด MIN เดฐเดฃเตเดเต เดเดชเตเดทเดจเตเดเดณเดฟเตฝ เดเตเดฑเดฟเดฏเดคเต เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด.
- เดฐเดฃเตเดเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเดณเตเด 0 เดจเต เดคเตเดฒเตเดฏเดฎเดฒเตเดฒ: เดเดฑเตเดฑเดตเตเด เดเตเดฑเดเตเด เดฎเตเดฒเตเดฏเด เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด.
เดตเตเดฏเดตเดธเตเดฅ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเดดเตเดคเตเด_เดธเดฎเดฏเด && เดธเดฎเดฏเด_เดฎเดพเดฑเตเดฑเตเด เดชเตเดฐเตเดฎเดพเดฑเตเดฑเด เดถเดฐเดฟเดฏเดพเดฏเดฟ เดเดพเดฃเดชเตเดชเตเดเตเด:
- เดเดจเตเดจเต เดฐเดฃเตเดเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ 0 เดจเต เดคเตเดฒเตเดฏเดฎเดฒเตเดฒ: เดชเตเดเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดค เดฎเตเดฒเตเดฏเด เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด.
- เดฐเดฃเตเดเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเดณเตเด 0 เดจเต เดคเตเดฒเตเดฏเดฎเดฒเตเดฒ: เดเดฑเตเดฑเดตเตเด เดเตเดฑเดเตเด เดฎเตเดฒเตเดฏเด เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด.
เดถเดเดฒเด 2
เดเดตเดฟเดทเตเดเดพเดฐเด เดเดชเตเดชเตเดดเตเด เดธเดคเตเดฏเดฎเดพเดฃเต. เดเดฐเตเดชเดเตเดทเต เดเดตเดฟเดเต '&&' เดเดชเตเดชเดฑเตเดฑเตเดฑเตผ เดเดชเดฏเตเดเดฟเดเตเดเดฟเดฐเดฟเดเตเดเดฃเด. disk.c 1419
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 เดเดจเตเดจเต เดฎเตเดฒเตเดฏเดเตเดเตพ เดเดฃเตเดเดพเดเดฐเตเดคเต.
เด เตบเดฒเดฟเดฎเดฟเดฑเตเดฑเดกเต เดฒเตเตป เดชเดเตผเดคเตเดคเตฝ
'sprintf' เดซเดเดเตโเดทเดจเตเดฑเต เดเดฐเต เดเตเตพ เดฌเดซเตผ 'เดซเตเตพเดชเดพเดคเตเดคเต' เดเดตเตผเดซเตเดฒเตเดฏเดฟเดฒเตเดเตเดเต เดจเดฏเดฟเดเตเดเตเด. 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(เดซเตเตพเดชเดพเดคเตเดคเต, PATH_MAX, ....).
เด เดจเดพเดตเดถเตเดฏเดฎเดพเดฏ เด เดตเดธเตเดฅ
เดธเตเดชเดพเดงเดฟเด เดชเดฆเดชเตเดฐเดฏเตเดเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เดญเดพเดเด เดเดฒเตเดฒเดพเดฏเตเดชเตเดชเตเดดเตเด เดถเดฐเดฟเดฏเดพเดฃเต: เดเตเตผเดเตเดเตเด > 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
- เดเดชเตเดชเตบ เดธเตเดดเตเดธเต เดเตเดกเตเดณเตเดณ เดเดฐเต RDP เดธเตเตผเดตเตผ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตฝ. เดชเตเดฐเตเดเดเตเดฑเตเดฑเต 2 เดญเดพเดเดเตเดเดณเดพเดฏเดฟ เดคเดฟเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต:
- xrdp - เดชเตเดฐเตเดเตเดเตเดเตเดเตเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตฝ. เด เดชเตเดชเดพเดเตเดเต 2.0 เดฒเตเดธเตปเดธเดฟเดจเต เดเตเดดเดฟเตฝ เดตเดฟเดคเดฐเดฃเด เดเตเดฏเตเดคเต.
- xorgxrdp - xrdp เดเดชเดฏเตเดเดฟเดเตเดเตเดณเตเดณ Xorg เดกเตเดฐเตเดตเดฑเตเดเดณเตเดเต เดเดฐเต เดเตเดเตเดเด. เดฒเตเดธเตปเดธเต - X11 (เดเดเดเดเดฟ เดชเตเดฒเต, เดเดจเตเดจเดพเตฝ เดชเดฐเดธเตเดฏเดคเตเดคเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเต เดจเดฟเดฐเตเดงเดฟเดเตเดเตเดจเตเดจเต)
rdesktop, FreeRDP เดเดจเตเดจเดฟเดตเดฏเตเดเต เดซเดฒเดเตเดเดณเต เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟเดฏเดพเดฃเต เดชเดฆเตเดงเดคเดฟเดฏเตเดเต เดตเดฟเดเดธเดจเด. เดคเตเดเดเตเดเดคเตเดคเดฟเตฝ, เดเตเดฐเดพเดซเดฟเดเตเดธเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป, เดจเดฟเดเตเดเตพ เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด VNC เดธเตเตผเดตเตผ เด เดฒเตเดฒเตเดเตเดเดฟเตฝ RDP เดชเดฟเดจเตเดคเตเดฃเดฏเตเดณเตเดณ เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด X11 เดธเตเตผเดตเตผ เดเดชเดฏเตเดเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต - X11rdp, เดเดจเตเดจเดพเตฝ xorgxrdp เดฏเตเดเต เดตเดฐเดตเตเดเต เด เดตเดฏเตเดเต เดเดตเดถเตเดฏเด เด เดชเตเดฐเดคเตเดฏเดเตเดทเดฎเดพเดฏเดฟ.
เด เดฒเตเดเดจเดคเตเดคเดฟเตฝ เดเดเตเดเตพ xorgxrdp เดเดตเตผ เดเตเดฏเตเดฏเดฟเดฒเตเดฒ.
xrdp เดชเตเดฐเตเดเดเตเดฑเตเดฑเต, เดฎเตเดฎเตเดชเดคเตเดคเตเดคเต เดชเตเดฒเต, เดตเดณเดฐเต เดเตเดฑเตเดคเดพเดฃเต, เด เดคเดฟเตฝ เดเดเดฆเตเดถเด 80 เดเดฏเดฟเดฐเด เดฒเตเดจเตเดเตพ เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.

เดเตเดเตเดคเตฝ เด เดเตเดทเดฐเดคเตเดคเตเดฑเตเดฑเตเดเตพ
เดเตเดกเดฟเตฝ เดธเดฎเดพเดจ เดฌเตเดฒเตเดเตเดเตเดเดณเตเดเต เดถเตเดเดฐเด เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. 87, 88, 89 เดตเดฐเดฟเดเดณเดฟเดฒเต 'r', 'g', 'r' เดเดจเดเตเดเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเด. rfxencode_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++;
}
....
}
....
}RemoteFX-เดจเตเดณเตเดณ jpeg2000 เดเตเดกเตเดเต เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเดจเตเดจ librfxcodec เดฒเตเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเดพเดฃเต เด เดเตเดกเต เดเดเตเดคเตเดคเดคเต. เดเดตเดฟเดเต, เดชเตเดฐเดคเตเดฏเดเตเดทเดคเตเดคเดฟเตฝ, เดเตเดฐเดพเดซเดฟเดเต เดกเดพเดฑเตเดฑ เดเดพเดจเดฒเตเดเตพ เดเดเดเดฒเตผเดจเตเดจเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต - "เดจเตเดฒ" เดจเดฟเดฑเดคเตเดคเดฟเดจเต เดชเดเดฐเด "เดเตเดตเดชเตเดชเต" เดฐเตเดเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเต. เดเตเดชเตเดชเดฟ-เดชเตเดธเตเดฑเตเดฑเดฟเดจเตเดฑเต เดซเดฒเดฎเดพเดฏเดฟ เด เดชเดฟเดถเดเต เดฆเตเดถเตเดฏเดฎเดพเดเดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดเต.
เดธเดฎเดพเดจเดฎเดพเดฏ เดเดฐเต เดซเดเดเตโเดทเดจเดฟเดฒเตเด เดเดคเต เดชเตเดฐเดถเตโเดจเด เดธเดเดญเดตเดฟเดเตเดเต rfx_encode_format_argb, เด เดจเดฒเตเดธเตผ เดเดเตเดเดณเตเดเต เดชเดฑเดเตเดเต:
เดเตเดกเดฟเตฝ เดธเดฎเดพเดจ เดฌเตเดฒเตเดเตเดเตเดเดณเตเดเต เดถเตเดเดฐเด เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. 260, 261, 262, 263 เดตเดฐเดฟเดเดณเดฟเดฒเต 'a', 'r', 'g', 'r' เดเดจเดเตเดเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเด. rfxencode_rgb_to_yuv.c 260
while (x < 64)
{
*la_buf++ = a;
*lr_buf++ = r;
*lg_buf++ = g;
*lb_buf++ = r;
x++;
}เด เดฑเต เดชเตเดฐเดเตเดฏเดพเดชเดจเด
เด เดฑเต เดเดตเตผเดฑเตบ เดธเดพเดงเตเดฏเดฎเดพเดฃเต. '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 เดเตเดฃเตเดเต เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดชเดฟเดถเดเตเดเดณเตเดจเตเดจเตเด เดธเดเดญเดตเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ - เดถเดฐเดฟเดฏเดพเดฏ เดตเดฒเตเดชเตเดชเด evdev-map.c เดซเดฏเดฒเดฟเตฝ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต, เด เดคเดฟเดจเดพเตฝ เด เดคเดฟเดฐเตเดเตพเดเตเดเต เดชเตเดฑเดคเตเดคเต เดเดจเตเดจเตเดฎเดฟเดฒเตเดฒ. เด เดคเดฟเดจเดพเตฝ เดเดคเต เดเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดชเดฐเดฟเดนเดฐเดฟเดเตเดเดพเดตเตเดจเตเดจ เดเดฐเต เดฌเดเต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต.
เดคเตเดฑเตเดฑเดพเดฏ เดคเดพเดฐเดคเดฎเตเดฏเด
เดธเตเดชเดพเดงเดฟเด เดชเดฆเดชเตเดฐเดฏเตเดเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เดญเดพเดเด เดเดฒเตเดฒเดพเดฏเตเดชเตเดชเตเดดเตเด เดคเตเดฑเตเดฑเดพเดฃเต: (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. เดเดตเดฟเดเต เดชเดฐเดฟเดถเตเดงเดจ เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ, เดเดพเดฐเดฃเด เดเดเตเดเตพ เดเดชเตเดชเดฟเดเดพเดคเตเดค เดตเตเดฐเดฟเดฏเดฌเดฟเตพ เดตเดพเดฏเดฟเดเตเดเตเดเดฏเตเด เดซเดฒเด เดเดฐเต เดตเดฒเดฟเดฏ เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเดฒเตเดเตเดเต เดจเตฝเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต, เด เดคเดฟเดจเดพเตฝ เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเต เดจเตเดเดฑเตเดฑเตเดตเต เดฎเตเดฒเตเดฏเด เดเดเตเดเตเดเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ.
เด เดจเดพเดตเดถเตเดฏ เดชเดฐเดฟเดถเตเดงเดจเดเตพ
เดธเตเดชเดพเดงเดฟเด เดชเดฆเดชเตเดฐเดฏเตเดเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เดญเดพเดเด เดเดฒเตเดฒเดพเดฏเตเดชเตเดชเตเดดเตเด เดถเดฐเดฟเดฏเดพเดฃเต: (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-เดฏเตเดเต เดเตเดฐเดฏเตฝ เดชเดคเดฟเดชเตเดชเต เดกเตเตบเดฒเตเดกเต เดเตเดฏเตเดฏเดพเด .
เดเดเดเตเดฒเตเดทเต เดธเดเดธเดพเดฐเดฟเดเตเดเตเดจเตเดจ เดชเตเดฐเตเดเตเดทเดเดฐเตเดฎเดพเดฏเดฟ เด เดฒเตเดเดจเด เดชเดเตเดเดฟเดเดพเตป เดจเดฟเดเตเดเตพ เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเตเดตเตเดเตเดเดฟเตฝ, เดตเดฟเดตเตผเดคเตเดคเดจ เดฒเดฟเดเตเดเต เดเดชเดฏเตเดเดฟเดเตเดเตเด: เดธเตเตผเดเดฟ เดฒเดพเดฑเดฟเตป.
เด
เดตเดฒเดเดฌเด: www.habr.com
