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 āĻ…ā§āϝāĻžāϰ⧇ underrun āϏāĻŽā§āĻ­āĻŦ. '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, āĻāϟāĻŋ āĻĢāĻžāχāϞ⧇āϰ āĻļ⧇āώ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āĻšāĻŦ⧇ (āĻĢāĻžāχāϞ⧇āϰ āĻļ⧇āώ⧇).

āĻĢāĻžāχāϞ⧇āϰ āĻļ⧇āώ⧇ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ§ā§āϰ⧁āĻŦāĻ•, āϏāĻžāϧāĻžāϰāĻŖāϤ -1 āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, CP1251 āĻāύāϕ⧋āĻĄāĻŋāĻ‚-āĻ, āϰāĻžāĻļāĻŋāϝāĻŧāĻžāύ āĻŦāĻ°ā§āĻŖāĻŽāĻžāϞāĻžāϰ āĻļ⧇āώ āĻ…āĻ•ā§āώāϰāϟāĻŋāϤ⧇ 0xFF āϕ⧋āĻĄ āϰāϝāĻŧ⧇āϛ⧇, āϝāĻž āϏāĻ‚āĻ–ā§āϝāĻž -1 āĻāϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞ⧇ āϝāĻžāϝāĻŧ āϝāĻĻāĻŋ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻŋ āĻ—ā§ƒāĻšāĻ¸ā§āĻĨāĻžāϞāĻŋāϰ āĻ•āĻžāϜ. āĻĻ⧇āĻ–āĻž āϝāĻžāĻšā§āϛ⧇ āϝ⧇ āĻĒā§āϰāϤ⧀āĻ• 0xFF, āĻŽāϤ āĻĢāĻžāχāϞ⧇āϰ āĻļ⧇āώ⧇ (-1) āĻĢāĻžāχāϞ⧇āϰ āĻļ⧇āώ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāχ āϧāϰāύ⧇āϰ āĻ¤ā§āϰ⧁āϟāĻŋāϗ⧁āϞāĻŋ āĻāĻĄāĻŧāĻžāϤ⧇, āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻĢāϞāĻžāĻĢāϞ fgetc āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āĻŽāϤ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āωāϚāĻŋāϤ āϕ⧋āύ int.

āϟāĻžāχāĻĒā§‹āϏ

āĻ–āĻŖā§āĻĄ āϘ

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 āĻāϰ āϏāĻŽāĻžāύ āύāϝāĻŧ: āϏāĻ°ā§āĻŦāύāĻŋāĻŽā§āύ āĻŽāĻžāύ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧁āύāĨ¤

āϏāĻ™ā§āϗ⧇ āĻļāĻ°ā§āϤ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āϝāĻ–āύ āϞāĻŋāϖ⧁āύ_āϏāĻŽāϝāĻŧ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ_āϏāĻŽāϝāĻŧ āφāϚāϰāĻŖ āϏāĻ āĻŋāĻ• āĻĻ⧇āĻ–āĻžāĻŦ⧇:

  • āĻāĻ• āĻŦāĻž āωāĻ­āϝāĻŧ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ 0 āĻāϰ āϏāĻŽāĻžāύ āύāϝāĻŧ: āĻāĻ•āϟāĻŋ āĻ…-āĻļā§‚āĻ¨ā§āϝ āĻŽāĻžāύ āϚāϝāĻŧāύ āĻ•āϰ⧁āύāĨ¤
  • āωāĻ­āϝāĻŧ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ 0 āĻāϰ āϏāĻŽāĻžāύ āύāϝāĻŧ: āϏāĻ°ā§āĻŦāύāĻŋāĻŽā§āύ āĻŽāĻžāύ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧁āύāĨ¤

āĻ–āĻŖā§āĻĄ āϘ

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 - āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύāĨ¤ Apache 2.0 āϞāĻžāχāϏ⧇āĻ¨ā§āϏ⧇āϰ āĻ…āϧ⧀āύ⧇ āĻŦāĻŋāϤāϰāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤
  • xorgxrdp - xrdp-āĻāϰ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ Xorg āĻĄā§āϰāĻžāχāĻ­āĻžāϰ⧇āϰ āĻāĻ•āϟāĻŋ āϏ⧇āϟāĨ¤ āϞāĻžāχāϏ⧇āĻ¨ā§āϏ - X11 (MIT āĻāϰ āĻŽāϤ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻŋāώāĻŋāĻĻā§āϧ)

āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āωāĻ¨ā§āύāϝāĻŧāύ rdesktop āĻāĻŦāĻ‚ FreeRDP āĻāϰ āĻĢāϞāĻžāĻĢāϞ⧇āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇āĨ¤ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇, āĻ—ā§āϰāĻžāĻĢāĻŋāĻ•ā§āϏ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• VNC āϏāĻžāĻ°ā§āĻ­āĻžāϰ, āĻŦāĻž RDP āϏāĻŽāĻ°ā§āĻĨāύ āϏāĻš āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļ⧇āώ X11 āϏāĻžāĻ°ā§āĻ­āĻžāϰ - X11rdp āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āĻ•āĻŋāĻ¨ā§āϤ⧁ 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))
  {
    ....
  }
  ....
}

āĻĢāĻžāĻ‚āĻļāύ āĻāĻ•āϟāĻŋ āϟāĻžāχāĻĒ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āĻĒāĻĄāĻŧāĻž āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰāϝ⧁āĻ•ā§āϤ āĻ¸ā§āĻŦāĻ˛ā§āĻĒ āĻŽāϤ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āĻŽāĻ§ā§āϝ⧇ āϕ⧋āύ 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-āĻāϰ āĻāĻ•āϟāĻŋ āĻŸā§āϰāĻžāϝāĻŧāĻžāϞ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ.

PVS-āĻ¸ā§āϟ⧁āĻĄāĻŋāĻ“ āĻŦāĻŋāĻļā§āϞ⧇āώāĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ rdesktop āĻāĻŦāĻ‚ xrdp āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āχāĻ‚āϰ⧇āϜāĻŋāĻ­āĻžāώ⧀ āĻĻāĻ°ā§āĻļāĻ•āĻĻ⧇āϰ āϏāĻžāĻĨ⧇ āĻ­āĻžāĻ— āĻ•āϰāϤ⧇ āϚāĻžāύ āϤāĻŦ⧇ āĻ…āύ⧁āĻ—ā§āϰāĻš āĻ•āϰ⧇ āĻ…āύ⧁āĻŦāĻžāĻĻ āϞāĻŋāĻ™ā§āĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ: āϏ⧇āĻ°ā§āϗ⧇āχ āϞāĻžāϰāĻŋāύāĨ¤ PVS-Studio āĻāϰ āϏāĻžāĻĨ⧇ rdesktop āĻāĻŦāĻ‚ xrdp āĻšā§‡āĻ• āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster