PVS-Studio เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต rdesktop, xrdp เดŽเดจเตเดจเดฟเดต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต

PVS-Studio เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต rdesktop, xrdp เดŽเดจเตเดจเดฟเดต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต
RDP เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเต‡เด–เดจเด™เตเด™เดณเตเดŸเต† เดชเดฐเดฎเตเดชเดฐเดฏเดฟเดฒเต† เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด…เดตเดฒเต‹เด•เดจเดฎเดพเดฃเดฟเดคเต. เด…เดคเดฟเตฝ เดจเดฎเตเดฎเตพ rdesktop เด•เตเดฒเดฏเดจเตเดฑเตเด‚ xrdp เดธเต†เตผเดตเดฑเตเด‚ เดจเต‹เด•เตเด•เตเด‚.

เดชเดฟเดถเด•เตเด•เตพ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด‰เดชเด•เดฐเดฃเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹. เด‡เดคเต C, C++, C#, Java เดŽเดจเตเดจเต€ เดญเดพเดทเด•เตพเด•เตเด•เดพเดฏเตเดณเตเดณ เด’เดฐเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เดกเต เด…เดจเดฒเตˆเดธเดฑเดพเดฃเต, เด‡เดคเต Windows, Linux, macOS เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเตเด•เดณเดฟเตฝ เดฒเดญเตเดฏเดฎเดพเดฃเต.

เดŽเดจเดฟเด•เตเด•เต เดฐเดธเด•เดฐเดฎเดพเดฏเดฟ เดคเต‹เดจเตเดจเดฟเดฏ เดคเต†เดฑเตเดฑเตเด•เตพ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดฒเต‡เด–เดจเด‚ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพ เดšเต†เดฑเตเดคเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เด•เตเดฑเดšเตเดšเต เดคเต†เดฑเตเดฑเตเด•เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต :).

เด…เดญเดฟเดชเดพเดฏเดชเตเดชเต†เดŸเตเด•. FreeRDP เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดชเดฐเดฟเดถเต‹เดงเดจเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เดฎเตเตป เดฒเต‡เด–เดจเด‚ เด•เดพเดฃเดพเด‚ เด‡เดตเดฟเดŸเต†.

rdesktop

rdesktop - UNIX-เด…เดงเดฟเดทเตเด เดฟเดค เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เด’เดฐเต RDP เด•เตเดฒเดฏเดจเตเดฑเต เดธเต—เดœเดจเตเดฏเดฎเดพเดฏเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพ Cygwin เดจเต เด•เต€เดดเดฟเตฝ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เดตเดฟเตปเดกเต‹เดธเดฟเดจเต เด•เต€เดดเดฟเดฒเตเด‚ เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. GPLv3 เดชเตเดฐเด•เดพเดฐเด‚ เดฒเตˆเดธเตปเดธเต.

เดˆ เด•เตเดฒเดฏเดจเตเดฑเต เดตเดณเดฐเต† เดœเดจเดชเตเดฐเดฟเดฏเดฎเดพเดฃเต - เด‡เดคเต ReactOS-เตฝ เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเดฟเดจเดพเดฏเดฟ เดฎเต‚เดจเตเดจเดพเด‚-เด•เด•เตเดทเดฟ เด—เตเดฐเดพเดซเดฟเด•เตเด•เตฝ เดซเตเดฐเดฃเตเดŸเต-เดŽเตปเดกเตเด•เดณเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด…เดฆเตเดฆเต‡เดนเดคเตเดคเดฟเดจเต เดชเตเดฐเดพเดฏเดฎเตเดฃเตเดŸเต: เด…เดฆเตเดฆเต‡เดนเดคเตเดคเดฟเดจเตเดฑเต† เด†เดฆเตเดฏ เดฑเดฟเดฒเต€เดธเต 4 เดเดชเตเดฐเดฟเตฝ 2001 เดจเต เดจเดŸเดจเตเดจเต - เดŽเดดเตเดคเตเดฎเตเดชเต‹เตพ, เด…เดฆเตเดฆเต‡เดนเดคเตเดคเดฟเดจเต 17 เดตเดฏเดธเตเดธเดพเดฏเดฟเดฐเตเดจเตเดจเต.

เดžเดพเตป เดจเต‡เดฐเดคเตเดคเต† เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†, เดชเดฆเตเดงเดคเดฟ เดตเดณเดฐเต† เดšเต†เดฑเตเดคเดพเดฃเต. เด…เดคเดฟเตฝ เดเด•เดฆเต‡เดถเด‚ 30 เด†เดฏเดฟเดฐเด‚ เด•เต‹เดกเต เดฒเตˆเดจเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เด…เดคเดฟเดจเตเดฑเต† เดชเตเดฐเดพเดฏเด‚ เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเด•เตเด•เตเดฎเตเดชเต‹เตพ เด…เตฝเดชเตเดชเด‚ เดตเดฟเดšเดฟเดคเตเดฐเดฎเดพเดฃเต. เดคเดพเดฐเดคเดฎเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ, FreeRDP-เดฏเดฟเตฝ 320 เด†เดฏเดฟเดฐเด‚ เดฒเตˆเดจเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด•เตเดฒเต‹เด•เตเด•เต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต† เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เด‡เดคเดพ:

PVS-Studio เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 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 เดŽเดจเตเดจ เดธเด‚เด–เตเดฏเดฏเตเดฎเดพเดฏเดฟ เดฏเต‹เดœเดฟเด•เตเด•เตเดจเตเดจเต. เดชเตเดฐเดคเต€เด•เด‚. เดšเดฟเดนเตเดจเด‚ 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 เดจเต เดคเตเดฒเตเดฏเดฎเดพเดฃเต: เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เดจเดฎเตเดฎเตพ เด’เดฐเต เดถเดพเด–เดฏเดฟเตฝ เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเด‚ เดฎเดฑเตเดฑเดพเดฐเต†เด™เตเด•เดฟเดฒเตเด‚: เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดฎเต‹เดกเต_เดŸเตˆเด‚ เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เด…เดตเดธเตเดฅ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดพเดคเต† เดŽเดชเตเดชเต‹เดดเตเด‚ 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 - เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เด•เต‹เดกเตเดณเตเดณ เด’เดฐเต RDP เดธเต†เตผเดตเตผ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ. เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต 2 เดญเดพเด—เด™เตเด™เดณเดพเดฏเดฟ เดคเดฟเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต:

  • xrdp - เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ. เด…เดชเตเดชเดพเดšเตเดšเต† 2.0 เดฒเตˆเดธเตปเดธเดฟเดจเต เด•เต€เดดเดฟเตฝ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดคเต.
  • xorgxrdp - xrdp เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดณเตเดณ Xorg เดกเตเดฐเตˆเดตเดฑเตเด•เดณเตเดŸเต† เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚. เดฒเตˆเดธเตปเดธเต - X11 (เดŽเด‚เดเดŸเดฟ เดชเต‹เดฒเต†, เดŽเดจเตเดจเดพเตฝ เดชเดฐเดธเตเดฏเดคเตเดคเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเดฐเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต)

rdesktop, FreeRDP เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เดซเดฒเด™เตเด™เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเดพเดฃเต เดชเดฆเตเดงเดคเดฟเดฏเตเดŸเต† เดตเดฟเด•เดธเดจเด‚. เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ, เด—เตเดฐเดพเดซเดฟเด•เตเดธเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป, เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• VNC เดธเต†เตผเดตเตผ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ RDP เดชเดฟเดจเตเดคเตเดฃเดฏเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• X11 เดธเต†เตผเดตเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต - X11rdp, เดŽเดจเตเดจเดพเตฝ xorgxrdp เดฏเตเดŸเต† เดตเดฐเดตเต‹เดŸเต† เด…เดตเดฏเตเดŸเต† เด†เดตเดถเตเดฏเด‚ เด…เดชเตเดฐเดคเตเดฏเด•เตเดทเดฎเดพเดฏเดฟ.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ xorgxrdp เด•เดตเตผ เดšเต†เดฏเตเดฏเดฟเดฒเตเดฒ.

xrdp เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต, เดฎเตเดฎเตเดชเดคเตเดคเต‡เดคเต เดชเต‹เดฒเต†, เดตเดณเดฐเต† เดšเต†เดฑเตเดคเดพเดฃเต, เด…เดคเดฟเตฝ เดเด•เดฆเต‡เดถเด‚ 80 เด†เดฏเดฟเดฐเด‚ เดฒเตˆเดจเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

PVS-Studio เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 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++;
      }
      ....
  }
  ....
}

RemoteFX-เดจเตเดณเตเดณ jpeg2000 เด•เต‹เดกเต†เด•เต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจ librfxcodec เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเดพเดฃเต เดˆ เด•เต‹เดกเต เดŽเดŸเตเดคเตเดคเดคเต. เด‡เดตเดฟเดŸเต†, เดชเตเดฐเดคเตเดฏเด•เตเดทเดคเตเดคเดฟเตฝ, เด—เตเดฐเดพเดซเดฟเด•เต เดกเดพเดฑเตเดฑ เดšเดพเดจเดฒเตเด•เตพ เด‡เดŸเด•เดฒเตผเดจเตเดจเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต - "เดจเต€เดฒ" เดจเดฟเดฑเดคเตเดคเดฟเดจเต เดชเด•เดฐเด‚ "เดšเตเดตเดชเตเดชเต" เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต. เด•เต‹เดชเตเดชเดฟ-เดชเต‡เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เดซเดฒเดฎเดพเดฏเดฟ เดˆ เดชเดฟเดถเด•เต เดฆเตƒเดถเตเดฏเดฎเดพเด•เดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต.

เดธเดฎเดพเดจเดฎเดพเดฏ เด’เดฐเต เดซเด‚เด—เตโ€Œเดทเดจเดฟเดฒเตเด‚ เด‡เดคเต‡ เดชเตเดฐเดถเตโ€Œเดจเด‚ เดธเด‚เดญเดตเดฟเดšเตเดšเต 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))
  {
    ....
  }
  ....
}

เดซเด‚เด—เตเดทเตป เด’เดฐเต เดคเดฐเด‚ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต เด’เดชเตเดชเดฟเดŸเดพเดคเตเดค เดทเต‹เตผเดŸเตเดŸเต เด’เดฐเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดฒเต‡เด•เตเด•เต 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-Studio เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต rdesktop, xrdp เดŽเดจเตเดจเดฟเดต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต

เด‡เด‚เด—เตเดฒเต€เดทเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‡เด•เตเดทเด•เดฐเตเดฎเดพเดฏเดฟ เดˆ เดฒเต‡เด–เดจเด‚ เดชเด™เตเด•เดฟเดŸเดพเตป เดจเดฟเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ, เดตเดฟเดตเตผเดคเตเดคเดจ เดฒเดฟเด™เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•: เดธเต†เตผเดœเดฟ เดฒเดพเดฑเดฟเตป. PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต rdesktop, xrdp เดŽเดจเตเดจเดฟเดต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•