PVS-Studio เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเจพเจฒ rdesktop เจ…เจคเฉ‡ xrdp เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจเจจเจพเจฒเจพเจˆเจœเจผเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ rdesktop เจ…เจคเฉ‡ xrdp เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ
RDP เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจฒเฉœเฉ€ เจตเจฟเฉฑเจš เจ‡เจน เจฆเฉ‚เจœเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจนเฉˆเฅค เจ‡เจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ rdesktop เจ•เจฒเจพเจ‡เฉฐเจŸ เจ…เจคเฉ‡ xrdp เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจตเฉ‡เจ–เจพเจ‚เจ—เฉ‡เฅค

เจ—เจฒเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจชเจ›เจพเจฃ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเจพเจงเจจ เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจชเฉ€เจตเฉ€เจเจธ-เจธเจŸเฉ‚เจกเฉ€เจ“เจ‡เจน C, C++, C# เจ…เจคเฉ‡ Java เจฒเจˆ เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจ•เฉ‹เจก เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจนเฉˆ, เจœเฉ‹ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎเจพเจ‚ 'เจคเฉ‡ เจ‰เจชเจฒเจฌเจง เจนเฉˆเฅค Windows, Linux ะธ macOS.

เจฒเฉ‡เจ– เจธเจฟเจฐเจซ เจ‰เจน เจ—เจฒเจคเฉ€เจ†เจ‚ เจชเฉ‡เจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจฎเฉˆเจจเฉ‚เฉฐ เจฆเจฟเจฒเจšเจธเจช เจฒเฉฑเจ—เจฆเฉ€เจ†เจ‚ เจธเจจ. เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ›เฉ‹เจŸเฉ‡ เจนเจจ, เจ‡เจธ เจฒเจˆ เจ•เฉเจ เจ—เจฒเจคเฉ€เจ†เจ‚ เจธเจจ :).

เจŸเจฟเฉฑเจชเจฃเฉ€. FreeRDP เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจคเจธเจฆเฉ€เจ• เจฌเจพเจฐเฉ‡ เจ‡เฉฑเจ• เจชเจฟเจ›เจฒเจพ เจฒเฉ‡เจ– เจชเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจ‡เฉฑเจฅเฉ‡.

rdesktop

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

เจ‡เจน เจ•เจฒเจพเจ‡เฉฐเจŸ เจฌเจนเฉเจค เจฎเจธเจผเจนเฉ‚เจฐ เจนเฉˆ - เจ‡เจน ReactOS เจตเจฟเฉฑเจš เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจฅเจฐเจก-เจชเจพเจฐเจŸเฉ€ เจ—เฉเจฐเจพเจซเจฟเจ•เจฒ เจซเจฐเฉฐเจŸ-เจเจ‚เจก เจตเฉ€ เจฒเฉฑเจญ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‰เจน เจ•เจพเจซเจผเฉ€ เจชเฉเจฐเจพเจฃเจพ เจนเฉˆ: เจ‰เจธเจฆเฉ€ เจชเจนเจฟเจฒเฉ€ เจฐเจฟเจฒเฉ€เจœเจผ 4 เจ…เจชเฉเจฐเฉˆเจฒ, 2001 เจจเฉ‚เฉฐ เจนเฉ‹เจˆ เจธเฉ€ - เจฒเจฟเจ–เจฃ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจ‰เจน 17 เจธเจพเจฒ เจฆเจพ เจนเฉˆเฅค

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฎเฉˆเจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจจเฉ‹เจŸ เจ•เฉ€เจคเจพ เจนเฉˆ, เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจนเฉเจค เจ›เฉ‹เจŸเจพ เจนเฉˆ. เจ‡เจธ เจตเจฟเฉฑเจš เจ•เฉ‹เจก เจฆเฉ€เจ†เจ‚ เจฒเจ—เจญเจ— 30 เจนเจœเจผเจพเจฐ เจฒเจพเจˆเจจเจพเจ‚ เจนเจจ, เจœเฉ‹ เจ•เจฟ เจ‡เจธเจฆเฉ€ เจ‰เจฎเจฐ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเฉ‹เจ เจฅเฉ‹เฉœเฉเจนเจพ เจ…เจœเฉ€เจฌ เจนเฉˆเฅค เจคเฉเจฒเจจเจพ เจฒเจˆ, FreeRDP เจตเจฟเฉฑเจš 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++;
  }
  ....
}

เจ‡เฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจซเจพเจˆเจฒ เจฆเฉ‡ เจ…เฉฐเจค เจคเฉฑเจ• เจชเจนเฉเฉฐเจšเจฃ เจฆเฉ€ เจ—เจฒเจค เจนเฉˆเจ‚เจกเจฒเจฟเฉฐเจ— เจตเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚: if fgetc เจ‡เฉฑเจ• เจ…เฉฑเจ–เจฐ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเจฟเจธเจฆเจพ เจ•เฉ‹เจก 0xFF เจนเฉˆ, เจ‡เจธ เจจเฉ‚เฉฐ เจซเจพเจˆเจฒ เจฆเฉ‡ เจ…เฉฐเจค เจตเจœเฉ‹เจ‚ เจธเจฎเจเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพ (EOF).

EOF เจ‡เจน เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจนเฉˆ, เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ -1 เจตเจœเฉ‹เจ‚ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, CP1251 เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจตเจฟเฉฑเจš, เจฐเฉ‚เจธเฉ€ เจตเจฐเจฃเจฎเจพเจฒเจพ เจฆเฉ‡ เจ†เจ–เจฐเฉ€ เจ…เฉฑเจ–เจฐ เจตเจฟเฉฑเจš เจ•เฉ‹เจก 0xFF เจนเฉˆ, เจœเฉ‹ เจจเฉฐเจฌเจฐ -1 เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆ เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ char. เจ‡เจน เจชเจคเจพ เจšเจฒเจฆเจพ เจนเฉˆ เจ•เจฟ เจชเฉเจฐเจคเฉ€เจ• 0xFF, เจœเจฟเจตเฉ‡เจ‚ EOF (-1) เจจเฉ‚เฉฐ เจซเจพเจˆเจฒ เจฆเฉ‡ เจ…เฉฐเจค เจตเจœเฉ‹เจ‚ เจธเจฎเจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจ—เจฒเจคเฉ€เจ†เจ‚ เจคเฉ‹เจ‚ เจฌเจšเจฃ เจฒเจˆ, เจซเฉฐเจ•เจธเจผเจจ เจฆเจพ เจจเจคเฉ€เจœเจพ เจนเฉˆ fgetc เจตเจฐเจ—เฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ‡เฉฐเจŸ.

เจŸเจพเจˆเจชเฉ‹เจœเจผ

เจ–เฉฐเจก 1

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; // <=
  ....
}

เจธเจผเจพเจ‡เจฆ เจ‡เจธ เจ•เฉ‹เจก เจฆเฉ‡ เจฒเฉ‡เจ–เจ• เจจเฉ‚เฉฐ เจ‡เจน เจ—เจฒเจค เจฒเฉฑเจ— เจ—เจฟเจ† เจนเฉˆ || ะธ && เจนเจพเจฒเจค เจตเจฟเฉฑเจš. เจ†เจ“ เจฎเฉเฉฑเจฒเจพเจ‚ เจฒเจˆ เจธเฉฐเจญเจต เจตเจฟเจ•เจฒเจชเจพเจ‚ 'เจคเฉ‡ เจตเจฟเจšเจพเจฐ เจ•เจฐเฉ€เจ เจฒเจฟเจ–เฉ‹_เจธเจฎเจพเจ‚ ะธ เจคเจฌเจฆเฉ€เจฒเฉ€_เจธเจฎเจพเจ‚:

  • เจฆเฉ‹เจตเฉ‡เจ‚ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ 0 เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ เจนเจจ: เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจผเจพเจ–เจพ เจตเจฟเฉฑเจš เจ–เจคเจฎ เจนเฉ‹เจตเจพเจ‚เจ—เฉ‡ เจนเฉ‹เจฐ: เจตเฉ‡เจฐเฉ€เจเจฌเจฒ mod_time เจ…เจ—เจฒเฉ€ เจธเจฅเจฟเจคเฉ€ เจฆเฉ€ เจชเจฐเจตเจพเจน เจ•เฉ€เจคเฉ‡ เจฌเจฟเจจเจพเจ‚ เจนเจฎเฉ‡เจธเจผเจพ 0 เจนเฉ‹เจตเฉ‡เจ—เจพเฅค
  • เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• 0 เจนเฉˆ: mod_time 0 เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ เจนเฉ‹เจตเฉ‡เจ—เจพ (เจฌเจธเจผเจฐเจคเฉ‡ เจ•เจฟ เจฆเฉ‚เจœเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเจพ เจ‡เฉฑเจ• เจ—เฉˆเจฐ-เจจเฉˆเจ—เฉ‡เจŸเจฟเจต เจฎเฉเฉฑเจฒ เจนเฉ‹เจตเฉ‡), เจ•เจฟเจ‰เจ‚เจ•เจฟ MIN เจฆเฉ‹ เจตเจฟเจ•เจฒเจชเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ›เฉ‹เจŸเฉ‡ เจจเฉ‚เฉฐ เจšเฉเจฃเฉ‡เจ—เจพเฅค
  • เจฆเฉ‹เจตเฉ‡เจ‚ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ 0 เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ เจจเจนเฉ€เจ‚ เจนเจจ: เจจเจฟเจŠเจจเจคเจฎ เจฎเฉเฉฑเจฒ เจšเฉเจฃเฉ‹เฅค

เจจเจพเจฒ เจธเจผเจฐเจค เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจตเฉ‡เจฒเฉ‡ write_time && change_time เจตเจฟเจนเจพเจฐ เจธเจนเฉ€ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพ:

  • เจ‡เฉฑเจ• เจœเจพเจ‚ เจฆเฉ‹เจตเฉ‡เจ‚ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ 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(fullpath, 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 - เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจ•เฉ‹เจก เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• RDP เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพเฅค เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ 2 เจญเจพเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฟเจ† เจ—เจฟเจ† เจนเฉˆ:

  • xrdp - เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพเฅค เจ…เจชเจพเจšเฉ‡ 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 เจ•เฉฐเจกเฉ€เจธเจผเจจเจฒ เจธเจฎเฉ€เจ•เจฐเจจ เจฆเจพ เจ‡เฉฑเจ• เจนเจฟเฉฑเจธเจพ เจนเจฎเฉ‡เจธเจผเจพ เจ—เจฒเจค เจนเฉเฉฐเจฆเจพ เจนเฉˆ: (เจ•เฉˆเจช_เจฒเฉ‡เจจ <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-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเจพ เจŸเฉเจฐเจพเจ‡เจฒ เจตเจฐเจœเจจ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจธเจพเจˆเจŸ.

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจเจจเจพเจฒเจพเจˆเจœเจผเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ rdesktop เจ…เจคเฉ‡ xrdp เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจ…เฉฐเจ—เจฐเฉ‡เจœเจผเฉ€ เจฌเฉ‹เจฒเจฃ เจตเจพเจฒเฉ‡ เจฆเจฐเจธเจผเจ•เจพเจ‚ เจจเจพเจฒ เจธเจพเจ‚เจเจพ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจ…เจจเฉเจตเจพเจฆ เจฒเจฟเฉฐเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹: เจธเจฐเจ—เฉ‡เจˆ เจฒเจพเจฐเจฟเจจเฅค PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจจเจพเจฒ rdesktop เจ…เจคเฉ‡ xrdp เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ

เจธเจฐเฉ‹เจค: www.habr.com

DDoS เจธเฉเจฐเฉฑเจ–เจฟเจ†, VPS VDS เจธเจฐเจตเจฐเจพเจ‚ เจตเจพเจฒเฉ€เจ†เจ‚ เจธเจพเจˆเจŸเจพเจ‚ เจฒเจˆ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจนเฉ‹เจธเจŸเจฟเฉฐเจ— เจ–เจฐเฉ€เจฆเฉ‹ ๐Ÿ”ฅ DDoS เจธเฉเจฐเฉฑเจ–เจฟเจ†, VPS VDS เจธเจฐเจตเจฐเจพเจ‚ เจจเจพเจฒ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ เจนเฉ‹เจธเจŸเจฟเฉฐเจ— เจ–เจฐเฉ€เจฆเฉ‹ | ProHoster