PVS-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชตเชฟเชถเซเชฒเซ‡เชทเช• เชธเชพเชฅเซ‡ rdesktop เช…เชจเซ‡ xrdp เชคเชชเชพเชธเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

PVS-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ rdesktop เช…เชจเซ‡ xrdp เชคเชชเชพเชธเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช
RDP เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพ เชตเชฟเชถเซ‡เชจเชพ เชฒเซ‡เช–เซ‹เชจเซ€ เชถเซเชฐเซ‡เชฃเซ€เชฎเชพเช‚ เช† เชฌเซ€เชœเซ€ เชธเชฎเซ€เช•เซเชทเชพ เช›เซ‡. เชคเซ‡เชฎเชพเช‚ เช†เชชเชฃเซ‡ rdesktop เช•เซเชฒเชพเชฏเชจเซเชŸ เช…เชจเซ‡ xrdp เชธเชฐเซเชตเชฐเชจเซ‡ เชœเซ‹เชˆเชถเซเช‚.

เชญเซ‚เชฒเซ‹เชจเซ‡ เช“เชณเช–เชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเชพเชงเชจ เชคเชฐเซ€เช•เซ‡ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡ เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹. ะญั‚ะพ ัั‚ะฐั‚ะธั‡ะตัะบะธะน ะฐะฝะฐะปะธะทะฐั‚ะพั€ ะบะพะดะฐ ะดะปั ัะทั‹ะบะพะฒ C, C++, C# ะธ Java, ะดะพัั‚ัƒะฟะฝั‹ะน ะฝะฐ ะฟะปะฐั‚ั„ะพั€ะผะฐั… Windows, Linux ะธ macOS.

เชฒเซ‡เช– เชซเช•เซเชค เชคเซ‡ เชญเซ‚เชฒเซ‹ เชฐเชœเซ‚ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ เชฎเชจเซ‡ เชฐเชธเชชเซเชฐเชฆ เชฒเชพเช—เชคเซ€ เชนเชคเซ€. เชœเซ‹ เช•เซ‡, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชจเชพเชจเชพ เช›เซ‡, เชคเซ‡เชฅเซ€ เชฅเซ‹เชกเซ€ เชญเซ‚เชฒเซ‹ เชนเชคเซ€ :).

เชจเซ‹เช‚เชงเชฃเซ€. เชซเซเชฐเซ€เช†เชฐเชกเซ€เชชเซ€ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชตเซ‡เชฐเชฟเชซเชฟเช•เซ‡เชถเชจ เชตเชฟเชถเซ‡ เช…เช—เชพเช‰เชจเซ‹ เชฒเซ‡เช– เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชนเซ€เช‚.

rdesktop

rdesktop โ€” ัะฒะพะฑะพะดะฝะฐั ั€ะตะฐะปะธะทะฐั†ะธั ะบะปะธะตะฝั‚ะฐ RDP ะดะปั UNIX-based ัะธัั‚ะตะผ. ะ•ะณะพ ั‚ะฐะบะถะต ะผะพะถะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะธ ะฟะพะด Windows, ะตัะปะธ ัะพะฑะธั€ะฐั‚ัŒ ะฟั€ะพะตะบั‚ ะฟะพะด Cygwin. ะ›ะธั†ะตะฝะทะธั€ะพะฒะฐะฝ ะฟะพะด GPLv3.

เช† เช•เซเชฒเชพเชฏเช‚เชŸ เช–เซ‚เชฌ เชœ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เช›เซ‡ - เชคเซ‡ ReactOS เชฎเชพเช‚ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชฏ เช›เซ‡, เช…เชจเซ‡ เชคเชฎเซ‡ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชคเซƒเชคเซ€เชฏ-เชชเช•เซเชท เช—เซเชฐเชพเชซเชฟเช•เชฒ เชซเซเชฐเชจเซเชŸ-เชเชจเซเชกเซเชธ เชชเชฃ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹. เชœเซ‹ เช•เซ‡, เชคเซ‡ เช–เซ‚เชฌ เชตเซƒเชฆเซเชง เช›เซ‡: เชคเซ‡เชจเซ€ เชชเซเชฐเชฅเชฎ เชฐเชœเซ‚เช†เชค 4 เชเชชเซเชฐเชฟเชฒ, 2001 เชจเชพ เชฐเซ‹เชœ เชฅเชˆ เชนเชคเซ€ - เชฒเซ‡เช–เชจ เชธเชฎเชฏเซ‡, เชคเซ‡ 17 เชตเชฐเซเชทเชจเซ‹ เช›เซ‡.

เชฎเซ‡เช‚ เช…เช—เชพเช‰ เชจเซ‹เช‚เชงเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชฎ, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชคเชฆเซเชฆเชจ เชจเชพเชจเซ‹ เช›เซ‡. เชคเซ‡เชฎเชพเช‚ เช•เซ‹เชกเชจเซ€ เชฒเช—เชญเช— 30 เชนเชœเชพเชฐ เชฒเชพเช‡เชจ เช›เซ‡, เชœเซ‡ เชคเซ‡เชจเซ€ เช‰เช‚เชฎเชฐเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฐเชพเช–เซ€เชจเซ‡ เชฅเซ‹เชกเซ€ เชตเชฟเชšเชฟเชคเซเชฐ เช›เซ‡. เชธเชฐเช–เชพเชฎเชฃเซ€ เชฎเชพเชŸเซ‡, เชซเซเชฐเซ€เช†เชฐเชกเซ€เชชเซ€เชฎเชพเช‚ 320 เชนเชœเชพเชฐ เชฐเซ‡เช–เชพเช“ เช›เซ‡. เช…เชนเซ€เช‚ เช•เซเชฒเซ‹เช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซเช‚ เช†เช‰เชŸเชชเซเชŸ เช›เซ‡:

PVS-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ rdesktop เช…เชจเซ‡ xrdp เชคเชชเชพเชธเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เช…เช—เชฎเซเชฏ เช•เซ‹เชก

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] = ' '; // <=
    str_handle_lines(output, &rest, linehandler, data);
  }
  ....
}

เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช•เซ‹เชก เชธเซเชจเชฟเชชเซ‡เชŸ เชซเชพเช‡เชฒเชฎเชพเช‚เชฅเซ€ เชฌเชซเชฐเชฎเชพเช‚ เชซเชพเช‡เชฒ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชตเชพเช‚เชšเซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, เช…เชนเซ€เช‚ เชธเช‚เชญเชพเชณเชตเชพเชฎเชพเช‚ เช•เซ‹เชˆ เชญเซ‚เชฒ เชจเชฅเซ€: เชœเซ‹ เช•เช‚เชˆเช• เช–เซ‹เชŸเซเช‚ เชฅเชพเชฏ, เชคเซ‹ เชชเช›เซ€ เชตเชพเช‚เชšเชตเซเช‚ -1 เชชเชฐเชค เช†เชตเชถเซ‡, เช…เชจเซ‡ เชชเช›เซ€ เชเชฐเซ‡ เช“เชตเชฐเชฐเชจ เชฅเชˆ เชœเชถเซ‡ เช†เช‰เชŸเชชเซเชŸ.

เชšเชพเชฐ เชชเซเชฐเช•เชพเชฐเชฎเชพเช‚ EOF เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹

V739 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++;
  }
  ....
}

เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ เชซเชพเช‡เชฒเชจเชพ เช…เช‚เชค เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเชตเชพเชจเซเช‚ เช–เซ‹เชŸเซเช‚ เชนเซ‡เชจเซเชกเชฒเชฟเช‚เช— เชœเซ‹เชฏเซเช‚ เช›เซ‡: เชœเซ‹ fgetc เชเช• เช…เช•เซเชทเชฐ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡เชจเซ‹ เช•เซ‹เชก 0xFF เช›เซ‡, เชคเซ‡เชจเซ‡ เชซเชพเช‡เชฒเชจเชพ เช…เช‚เชค เชคเชฐเซ€เช•เซ‡ เช…เชฐเซเชฅเช˜เชŸเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ (EOF).

EOF เชคเซ‡ เชธเซเชฅเชฟเชฐ เช›เซ‡, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ -1 เชคเชฐเซ€เช•เซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชฅเชพเชฏ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, CP1251 เชเชจเซเช•เซ‹เชกเชฟเช‚เช—เชฎเชพเช‚, เชฐเชถเชฟเชฏเชจ เชฎเซ‚เชณเชพเช•เซเชทเชฐเซ‹เชจเชพ เช›เซ‡เชฒเซเชฒเชพ เช…เช•เซเชทเชฐเชฎเชพเช‚ เช•เซ‹เชก 0xFF เช›เซ‡, เชœเซ‡ เชจเช‚เชฌเชฐ -1 เชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡ เชœเซ‹ เช†เชชเชฃเซ‡ เชšเชฒ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เช˜เชฐเชจเชพเช‚ เชชเชฐเชšเซ‚เชฐเชฃ เช•เชพเชฎเซ‹. เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชชเซเชฐเชคเซ€เช• 0xFF, เชœเซ‡เชฎ EOF (-1) เชซเชพเช‡เชฒเชจเชพ เช…เช‚เชค เชคเชฐเซ€เช•เซ‡ เช…เชฐเซเชฅเช˜เชŸเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช†เชตเซ€ เชญเซ‚เชฒเซ‹เชจเซ‡ เชŸเชพเชณเชตเชพ เชฎเชพเชŸเซ‡, เช•เชพเชฐเซเชฏเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช›เซ‡ fgetc เชœเซ‡เชตเชพ เชšเชฒเชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช เชชเซ‚เชฐเซเชฃเชพเช‚เช•.

เชŸเชพเชˆเชชเซ‹

เชŸเซเช•เชกเซ‹ 1

V547 เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟ '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

V547 เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟ เชนเช‚เชฎเซ‡เชถเชพ เชธเชพเชšเซ€ เชนเซ‹เชฏ เช›เซ‡. เช•เชฆเชพเชš เช…เชนเซ€เช‚ '&&' เช“เชชเชฐเซ‡เชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชตเซ‹ เชœเซ‹เชˆเช. 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 เชฎเซ‚เชฒเซเชฏ เชนเซ‹เชˆ เชถเช•เชคเซเช‚ เชจเชฅเซ€.

เช…เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชฐเซ‡เช–เชพ เชจเช•เชฒ

V512 '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, ....).

เชจเชฟเชฐเชฐเซเชฅเช• เชธเซเชฅเชฟเชคเชฟ

V560 เชถเชฐเชคเซ€ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเชจเซ‹ เชเช• เชญเชพเช— เชนเช‚เชฎเซ‡เชถเชพ เชธเชพเชšเซ‹ เชนเซ‹เชฏ เช›เซ‡: เช‰เชฎเซ‡เชฐเซ‹ > 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 - เช“เชชเชจ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เชธเชพเชฅเซ‡ เช†เชฐเชกเซ€เชชเซ€ เชธเชฐเซเชตเชฐเชจเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ. เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ 2 เชญเชพเช—เซ‹เชฎเชพเช‚ เชตเชนเซ‡เช‚เชšเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡:

  • xrdp - เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เช…เชฎเชฒเซ€เช•เชฐเชฃ. Apache 2.0 เชฒเชพเชฏเชธเชจเซเชธ เชนเซ‡เช เชณ เชตเชฟเชคเชฐเชฟเชค.
  • xorgxrdp - xrdp เชธเชพเชฅเซ‡ เชตเชพเชชเชฐเชตเชพ เชฎเชพเชŸเซ‡ Xorg เชกเซเชฐเชพเช‡เชตเชฐเซ‹เชจเซ‹ เชธเชฎเซ‚เชน. เชฒเชพเช‡เชธเชจเซเชธ - X11 (เชœเซ‡เชฎ เช•เซ‡ MIT, เชชเชฐเช‚เชคเซ เชœเชพเชนเซ‡เชฐเชพเชคเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชจเซ‡ เชชเซเชฐเชคเชฟเชฌเช‚เชงเชฟเชค เช•เชฐเซ‡ เช›เซ‡)

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‹ เชตเชฟเช•เชพเชธ rdesktop เช…เชจเซ‡ FreeRDP เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡. เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เช—เซเชฐเชพเชซเชฟเช•เซเชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช…เชฒเช— VNC เชธเชฐเซเชตเชฐ, เช…เชฅเชตเชพ RDP เชธเชชเซ‹เชฐเซเชŸ - X11rdp เชธเชพเชฅเซ‡ เชตเชฟเชถเชฟเชทเซเชŸ X11 เชธเชฐเซเชตเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹, เชชเชฐเช‚เชคเซ xorgxrdp เชจเชพ เช†เช—เชฎเชจ เชธเชพเชฅเซ‡, เชคเซ‡เชฎเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เช…เชฆเซƒเชถเซเชฏ เชฅเชˆ เช—เชˆ.

เช† เชฒเซ‡เช–เชฎเชพเช‚ เช…เชฎเซ‡ xorgxrdpเชจเซ‡ เช†เชตเชฐเซ€เชถเซเช‚ เชจเชนเซ€เช‚.

xrdp เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ, เช…เช—เชพเช‰เชจเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ€ เชœเซ‡เชฎ, เช–เซ‚เชฌ เชœ เชจเชพเชจเซ‹ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชฒเช—เชญเช— 80 เชนเชœเชพเชฐ เชฒเชพเชˆเชจเซ‹ เช›เซ‡.

PVS-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ rdesktop เช…เชจเซ‡ xrdp เชคเชชเชพเชธเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เชตเชงเซ เชŸเชพเชˆเชชเซ‹

V525 เช•เซ‹เชกเชฎเชพเช‚ เชธเชฎเชพเชจ เชฌเซเชฒเซ‹เช•เซเชธเชจเซ‹ เชธเช‚เช—เซเชฐเชน เช›เซ‡. 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++;
      }
      ....
  }
  ....
}

เช† เช•เซ‹เชก librfxcodec เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชฎเชพเช‚เชฅเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹, เชœเซ‡ RemoteFX เชฎเชพเชŸเซ‡ jpeg2000 เช•เซ‹เชกเซ‡เช•เชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ‡ เช›เซ‡. เช…เชนเซ€เช‚, เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡, เช—เซเชฐเชพเชซเชฟเช• เชกเซ‡เชŸเชพ เชšเซ‡เชจเชฒเซ‹ เชฎเชฟเชถเซเชฐเชฟเชค เช›เซ‡ - "เชตเชพเชฆเชณเซ€" เชฐเช‚เช—เชจเซ‡ เชฌเชฆเชฒเซ‡, "เชฒเชพเชฒ" เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช† เชญเซ‚เชฒ เชฎเซ‹เชŸเชพ เชญเชพเช—เซ‡ เช•เซ‹เชชเซ€-เชชเซ‡เชธเซเชŸเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‡ เชฆเซ‡เช–เชพเชˆ เช›เซ‡.

เชธเชฎเชพเชจ เช•เชพเชฐเซเชฏเชฎเชพเช‚ เชธเชฎเชพเชจ เชธเชฎเชธเซเชฏเชพ เช†เชตเซ€ rfx_encode_format_argb, เชœเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเช•เซ‡ เช…เชฎเชจเซ‡ เชชเชฃ เช•เชนเซเชฏเซเช‚:

V525 เช•เซ‹เชกเชฎเชพเช‚ เชธเชฎเชพเชจ เชฌเซเชฒเซ‹เช•เซเชธเชจเซ‹ เชธเช‚เช—เซเชฐเชน เช›เซ‡. 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++;
}

เชเชฐเซ‡ เช˜เซ‹เชทเชฃเชพ

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 เชฅเซ€ เช…เชฒเช— เช›เซ‡. เชœเซ‹ เช•เซ‡, เช•เซ‹เชˆ เชญเซ‚เชฒเซ‹ เชฅเชคเซ€ เชจเชฅเซ€ - เชฏเซ‹เช—เซเชฏ เช•เชฆ evdev-map.c เชซเชพเช‡เชฒเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชฎเชฐเซเชฏเชพเชฆเชพเชจเซ€ เชฌเชนเชพเชฐ เชจเชฅเซ€. เชคเซ‹ เช† เชฎเชพเชคเซเชฐ เชเช• เชญเซ‚เชฒ เช›เซ‡ เชœเซ‡เชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เช เซ€เช• เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช–เซ‹เชŸเซ€ เชธเชฐเช–เชพเชฎเชฃเซ€

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))
  {
    ....
  }
  ....
}

เชซเช‚เช•เซเชถเชจ เชเช• เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชšเชฒ เชตเชพเช‚เชšเซ‡ เช›เซ‡ เชŸเซ‚เช‚เช•เชฎเชพเช‚ เชธเชนเซ€ เชตเชฟเชจเชพเชจเซเช‚ เชœเซ‡เชตเชพ เชšเชฒ เชฎเชพเช‚ เชชเซ‚เชฐเซเชฃเชพเช‚เช•. เช…เชนเซ€เช‚ เชคเชชเชพเชธ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€ เช•เชพเชฐเชฃ เช•เซ‡ เช†เชชเชฃเซ‡ เชธเชนเซ€ เชจ เช•เชฐเซ‡เชฒ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชตเชพเช‚เชšเซ€เช เช›เซ€เช เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เชฎเซ‹เชŸเชพ เชตเซ‡เชฐเซ€เชเชฌเชฒเชจเซ‡ เชธเซ‹เช‚เชชเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช, เชคเซ‡เชฅเซ€ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชจเช•เชพเชฐเชพเชคเซเชฎเช• เชฎเซ‚เชฒเซเชฏ เชฒเชˆ เชถเช•เชคเซเช‚ เชจเชฅเซ€.

เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เชคเชชเชพเชธ

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 เชจเซเช‚ เชŸเซเชฐเชพเชฏเชฒ เชตเชฐเซเชเชจ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชธเชพเช‡เชŸ.

PVS-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ rdesktop เช…เชจเซ‡ xrdp เชคเชชเชพเชธเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เชœเซ‹ เชคเชฎเซ‡ เช† เชฒเซ‡เช– เช…เช‚เช—เซเชฐเซ‡เชœเซ€ เชฌเซ‹เชฒเชคเชพ เชชเซเชฐเซ‡เช•เซเชทเช•เซ‹ เชธเชพเชฅเซ‡ เชถเซ‡เชฐ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชนเซ‹, เชคเซ‹ เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เช…เชจเซเชตเชพเชฆ เชฒเชฟเช‚เช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹: Sergey Larin. PVS-Studio เชธเชพเชฅเซ‡ rdesktop เช…เชจเซ‡ xrdp เชคเชชเชพเชธเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เชธเซ‹เชฐเซเชธ: www.habr.com

DDoS เชธเซเชฐเช•เซเชทเชพ, VPS VDS เชธเชฐเซเชตเชฐ เชงเชฐเชพเชตเชคเซ€ เชธเชพเช‡เชŸเซเชธ เชฎเชพเชŸเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เช–เชฐเซ€เชฆเซ‹ ๐Ÿ”ฅ DDoS เชธเซเชฐเช•เซเชทเชพ, VPS VDS เชธเชฐเซเชตเชฐเซเชธ เชธเชพเชฅเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชตเซ‡เชฌเชธเชพเช‡เชŸ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เช–เชฐเซ€เชฆเซ‹ | ProHoster