rdesktop แƒ“แƒ xrdp แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

rdesktop-แƒ˜แƒกแƒ แƒ“แƒ xrdp-แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒ”แƒแƒ แƒ” แƒ›แƒ˜แƒ›แƒแƒฎแƒ˜แƒšแƒ•แƒ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฆแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ RDP แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒแƒกแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— rdesktop แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒก แƒ“แƒ xrdp แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก.

แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ PVS- แƒกแƒขแƒฃแƒ“แƒ˜แƒ. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ C, C++, C# แƒ“แƒ Java แƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ Windows, Linux แƒ“แƒ macOS แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ”แƒ‘แƒ–แƒ”.

แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒฉแƒแƒœแƒ“แƒ. แƒ—แƒฃแƒ›แƒชแƒ, แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒชแƒ˜แƒ แƒ”แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒชแƒแƒขแƒ แƒ˜แƒงแƒ :).

แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ. แƒฌแƒ˜แƒœแƒ แƒกแƒขแƒแƒขแƒ˜แƒ FreeRDP แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒแƒฅ.

rdesktop

rdesktop โ€” RDP แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒฃแƒคแƒแƒกแƒ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ UNIX-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒก แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก Windows-แƒ˜แƒก แƒฅแƒ•แƒ”แƒจ, แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ— แƒžแƒ แƒแƒ”แƒฅแƒขแƒก Cygwin-แƒ˜แƒก แƒฅแƒ•แƒ”แƒจ. แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ GPLv3-แƒ˜แƒ—.

แƒ”แƒก แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜แƒ - แƒ˜แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ ReactOS-แƒจแƒ˜ แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒžแƒแƒ•แƒแƒ— แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ›แƒฎแƒแƒ แƒ˜แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒฌแƒ˜แƒœแƒ แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜. แƒ—แƒฃแƒ›แƒชแƒ, แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒแƒกแƒแƒ™แƒแƒ•แƒแƒœแƒ˜แƒ: แƒ›แƒ˜แƒกแƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒจแƒ”แƒ“แƒ’แƒ 4 แƒฌแƒšแƒ˜แƒก 2001 แƒแƒžแƒ แƒ˜แƒšแƒก - แƒฌแƒ”แƒ แƒ˜แƒก แƒ“แƒ แƒแƒก แƒ˜แƒก 17 แƒฌแƒšแƒ˜แƒกแƒแƒ.

แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒ™แƒ•แƒ” แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒ”, แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒชแƒ˜แƒ แƒ”แƒ. แƒ˜แƒก แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 30 แƒแƒ—แƒแƒก แƒฎแƒแƒ–แƒก แƒ™แƒแƒ“แƒก, แƒ แƒแƒช แƒชแƒแƒขแƒ แƒฃแƒชแƒœแƒแƒฃแƒ แƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒแƒกแƒแƒ™แƒ˜แƒก แƒ’แƒแƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, FreeRDP แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก 320 แƒแƒ—แƒแƒก แƒฎแƒแƒ–แƒก. แƒแƒฅ แƒแƒ แƒ˜แƒก Cloc แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜:

rdesktop-แƒ˜แƒกแƒ แƒ“แƒ xrdp-แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ›แƒ˜แƒฃแƒฌแƒ•แƒ“แƒแƒ›แƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜

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-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ char แƒขแƒ˜แƒžแƒ˜แƒก

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, แƒ—แƒฃ แƒ•แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘แƒ— แƒชแƒ•แƒšแƒแƒ“แƒ–แƒ”, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒกแƒแƒขแƒแƒœแƒ™แƒ. แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒ 0xFF, แƒ›แƒแƒกแƒฌแƒแƒœแƒก EOF (-1) แƒ˜แƒœแƒขแƒ”แƒ แƒžแƒ แƒ”แƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ“แƒแƒกแƒแƒกแƒ แƒฃแƒšแƒ˜. แƒแƒกแƒ”แƒ—แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒกแƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ“, แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒ fgetc แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ int.

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ 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-แƒ˜แƒก: แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒแƒฆแƒ›แƒแƒ•แƒฉแƒœแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒขแƒแƒขแƒจแƒ˜ แƒกแƒฎแƒ•แƒ: แƒชแƒ•แƒšแƒแƒ“แƒ˜ 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' แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒ‘แƒฃแƒคแƒ”แƒ แƒ˜แƒก 'fullpath'-แƒ˜แƒก แƒ’แƒแƒ“แƒ˜แƒœแƒ”แƒ‘แƒแƒก. 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 แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ: 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 - แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ. แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Apache 2.0 แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ˜แƒ—.
  • xorgxrdp - Xorg แƒ“แƒ แƒแƒ˜แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜ xrdp-แƒ—แƒแƒœ แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“. แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ - X11 (แƒ แƒแƒ’แƒแƒ แƒช MIT, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ™แƒ แƒซแƒแƒšแƒแƒ•แƒก แƒ แƒ”แƒ™แƒšแƒแƒ›แƒแƒจแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก)

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ rdesktop-แƒ˜แƒกแƒ แƒ“แƒ FreeRDP-แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒก. แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“, แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒแƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒแƒ— แƒชแƒแƒšแƒ™แƒ” VNC แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, แƒแƒœ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ X11 แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ RDP แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒ— - X11rdp, แƒ›แƒแƒ’แƒ แƒแƒ› xorgxrdp-แƒ˜แƒก แƒ›แƒแƒกแƒ•แƒšแƒแƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“, แƒ›แƒแƒ—แƒ˜ แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ แƒ’แƒแƒฅแƒ แƒ.

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒแƒ•แƒแƒจแƒฃแƒฅแƒ”แƒ‘แƒ— xorgxrdp.

xrdp แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜, แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ˜แƒœแƒ, แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒชแƒ˜แƒ แƒ”แƒ แƒ“แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 80 แƒแƒ—แƒแƒก แƒฎแƒแƒ–แƒก.

rdesktop-แƒ˜แƒกแƒ แƒ“แƒ xrdp-แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ›แƒ”แƒขแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ

V525 แƒ™แƒแƒ“แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒšแƒ”แƒฅแƒชแƒ˜แƒแƒก. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜ 'r', 'g', 'r' แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒจแƒ˜ 87, 88, 89. 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 แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒ“แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก jpeg2000 แƒ™แƒแƒ“แƒ”แƒ™แƒก RemoteFX-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒฅ, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒแƒ แƒฎแƒ”แƒ‘แƒ˜ แƒแƒ˜แƒ แƒ˜แƒ - "แƒšแƒฃแƒ แƒฏแƒ˜" แƒคแƒ”แƒ แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, "แƒฌแƒ˜แƒ—แƒ”แƒšแƒ˜" แƒแƒ แƒ˜แƒก แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜. แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ, แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒ’แƒแƒฉแƒœแƒ“แƒ แƒ™แƒแƒžแƒ˜แƒ -แƒžแƒแƒกแƒขแƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“.

แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒฌแƒแƒ แƒ›แƒแƒ˜แƒจแƒ•แƒ แƒ›แƒกแƒ’แƒแƒ•แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒจแƒ˜ 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-แƒ˜แƒ—. แƒ—แƒฃแƒ›แƒชแƒ, แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒแƒ  แƒฎแƒ“แƒ”แƒ‘แƒ - แƒกแƒฌแƒแƒ แƒ˜ แƒ–แƒแƒ›แƒ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ 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))
  {
    ....
  }
  ....
}

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก แƒขแƒ˜แƒžแƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฃแƒฌแƒ”แƒ แƒ”แƒšแƒ˜ แƒ›แƒแƒ™แƒšแƒ” แƒชแƒ•แƒšแƒแƒ“แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ 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-แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒ’แƒแƒฃแƒ–แƒ˜แƒแƒ แƒแƒ— แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒ”แƒœแƒแƒ•แƒแƒœ แƒแƒฃแƒ“แƒ˜แƒขแƒแƒ แƒ˜แƒแƒก, แƒ’แƒ—แƒฎแƒแƒ•แƒ—, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ˜: แƒกแƒ”แƒ แƒ’แƒ”แƒ˜ แƒšแƒแƒ แƒ˜แƒœแƒ˜. rdesktop แƒ“แƒ xrdp แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ PVS-Studio-แƒ˜แƒ—

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ