
á¤áááşáážáŹ RDP ááááŻáááŻááąáŹáážááˇáş ááŻááşááąáŹááşáááşáĄáá˝ááş áá˝ááˇáşááŹá¸ááąáŹ ááááŻááááşááťáŹá¸ááᯠá
á
áşááąá¸ááźááşá¸áĄááźáąáŹááşá¸ ááąáŹááşá¸ááŤá¸áá˝á˛áá
áşááŻáá˝ááş ááŻáááááźááşáááşááŻáśá¸áááşááźááşá¸ááźá
áşáááşá áááşá¸áá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş rdesktop client áážááˇáş xrdp server áááŻá
ááşá¸á
áŹá¸ááŤáááşá
áĄáážáŹá¸áĄáá˝ááşá¸ááťáŹá¸ááᯠááąáŹáşááŻááşááŹáá˝ááş áĄááŻáśá¸ááźáŻáááˇáş ááááááŹááźá
áşáá˛áˇááŤáááşá áááşá¸áááş Cá C++á C# áážááˇáş Java ááááşááąáŹááşá¸ááťáŹá¸ááąáŤáşáá˝ááş ááážááááŻááşááąáŹ static code analyzer áá
áşááŻááźá
áşáááşá Windows, Linux и macOS.
ááąáŹááşá¸ááŤá¸áááş ááťá˝ááşáŻááşáĄáá˝ááş á áááşáááşá áŹá¸áá˝ááşááąáŹááşá¸ááąáŹ áĄáážáŹá¸ááťáŹá¸áááŻáᏠáááşáááşááŤáááşá áááŻáˇááąáŹáş áááąáŹááťááşááťáŹá¸áááş ááąá¸áááşááąáŹááźáąáŹááˇáş áĄáážáŹá¸áĄáá˝ááşá¸áĄáááşá¸áááşáážááá˛áˇáááşá
áá˝áąáŹáááŻ. FreeRDP áááąáŹááťááşááŻáśá¸áááşááťááşáĄááźáąáŹááşá¸ ááááşááąáŹááşá¸ááŤá¸ááᯠáá˝áąáˇáááŻááşáááşá .
áááşá áşááąáŹáˇ
â ŃĐ˛ĐžĐąĐžĐ´Đ˝Đ°Ń ŃоаНиСаŃĐ¸Ń ĐşĐťĐ¸ĐľĐ˝Ńа RDP Đ´ĐťŃ UNIX-based ŃиŃŃоП. ĐгО ŃакМо ПОМнО иŃпОНŃСОваŃŃ Đ¸ пОд Windows, ĐľŃНи ŃОйиŃаŃŃ ĐżŃĐžĐľĐşŃ ĐżĐžĐ´ Cygwin. ĐиŃонСиŃОван пОд GPLv3.
á¤ááááŻááşá¸áááˇáşáááş áĄáá˝ááşááąáááşá¸á áŹá¸áááş â áááşá¸áááş ReactOS áá˝ááş áá°áááşá¸ááźá áşááźáŽá¸á áááşá¸áĄáá˝ááş ááźááşáááááşáá áşáááŻááşáᏠáážáąáˇá á˝ááşá¸ááťáŹá¸ááᯠáá˝áąáˇáážááááŻááşáááşá áááŻáˇááąáŹáşá áááşá¸áááşáĄááąáŹáşááąá¸ááąáŹááşá¸ááąááźáŽááźá áşáááş- ááááĄááźáááşááŻááşááąáážáŻáááşá§ááźáŽá 4á 2001 - ááąá¸ááŹá¸ááťáááşáá˝ááşáááşá¸áááş 17 áážá áşááźá áşáááşá
á áąáŹá áąáŹáááźáąáŹáá˛áˇááááŻáᲠáááąáŹááťááşá ááąá¸ááąá¸ááąá¸ááŤá áááşá¸áá˝ááş ááŻááşáááŻááşá¸ááąáŤááşá¸ 30 áááˇáşááŤáááşááźáŽá¸ áááşá¸áááş áááşá¸ááĄáááşáĄáá˝ááşáĄá áĄáááşá¸áááşáá°á¸áááşá¸áááşá áážááŻááşá¸áážááşáááşáĄáá˝ááş FreeRDP áá˝ááş áááŻááşá¸ ááá,ááá ááŤáážááááşá á¤áááşáážáŹ Cloc ááááŻááááşá ááááşááźá áşáááşá

áááşáá˝ááşáááááąáŹááŻááş
áááážááááŻááşááąáŹááŻááşááᯠáá˝áąáˇáážááá˛áˇáááşá error áážáááąáᏠááźá áşáááŻááşáááşá 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);
}ááŻááşááąáŹááşááťááşáá˝ááş áĄáážáŹá¸áááş ááťá˝ááşáŻááşáááŻáˇáážááˇáş áááŻááşááŽááŤáááşá áĄááá: áĄáąáŹáşáááąááŹáá˛áˇááąáŹááşáážáŹ ááŤááŹáá˛áˇ ááŻááşááᯠááťá˝ááşááąáŹáşáááŻáˇ ááźááşááŤáááşá ááźááşáᏠ- á¤áĄáááŻááşá¸áááş áážááşááŹááşáážááşá¸áááşá¸ááźááşá¸ááᯠááŻááşááąáŹááşáááşá áááŻáˇááŹáá˝ááşá áĄáážáŹá¸áááş ááźáááşá¸ááźáąáŹááşáážáŻáá áşááŻáááŻááşááą- ááááŻááááşááᯠáááşá á˛ááźáŽá¸ááąáŹááş áá˝á˛ááąáááşáážááşááŹá¸ááąáŹ áážááşááŹááşáĄáŹá¸ááŻáśá¸ááᯠáááşáááşáážáŻá áá áşá áážááşá¸áááşá¸áá˝áŹá¸áááşááźá áşáááşá
áááŻááşáá˝ááşááŹáá˝ááş áĄáážáŹá¸áĄáá˝ááşá¸ááážáááŤá
Array áááş underrun ááźá áşáááŻááşáááşá 'n' áĄáá˝ážááşá¸ááááşá¸áááşáááŻá¸áááş -1 áááŻáˇááąáŹááşáážááááŻááşáááşá rdesktop.c áááá
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 ááźááşááŹáááşááźá áşááźáŽá¸á áááŻáˇááąáŹááş array áááş áĄáááˇáşáĄáááşááážá ááźá áşááąááááˇáşáááşá output áááŻ.
char áĄááťááŻá¸áĄá áŹá¸áá˝ááş EOF áááŻáĄááŻáśá¸ááźáŻááźááşá¸á
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 ááŻááşááśááŤááşáá˝ááşá ááŻáážáŹá¸áĄáášáááŹáááąáŹááşááŻáśá¸áĄáášáááŹáá˝ááş ááŻááşááśááŤááş -0 áážááˇáş áááŻááşááŽááąáŹ ááŻááşááśááŤááş-1 ááŤáážááááşá char. áááşášááąá 0xFF áá˛áˇáááŻáˇááźá áşáááŻááşáááşá EOF (-á) áááŻááşááĄááŻáśá¸áĄááźá áş áááąáŹááŹá¸áááşá áááŻáááŻáˇááąáŹáĄáážáŹá¸ááťáŹá¸áááŻáážáąáŹááşáážáŹá¸áááş function áááŻáááááş fgetc variable áĄááťááŻá¸áĄá áŹá¸áá˛áážáŹ ááááşá¸áááşá¸ááŹá¸áááˇáşááŤáááşá int.
á áŹááŻáśá¸ááąáŤááşá¸
áá áşáááŻááşá¸áá áşá á
'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 áážááˇáş ááŽááááˇáşáááş (áĄááźáŹá¸ variable áá˝ááş áĄááŻááşááášáááŹáááŻááşááąáŹáááşáááŻá¸) áážáááąáŹááźáąáŹááˇáşááźá áşáááşá MIN áá˝áąá¸á ááŹáážá áşááŻáá˛á áĄááąá¸ááᯠáá˝áąá¸ááááˇáşáááşá
- ááááşá¸áážááşáážá áşááŻááŻáśá¸áááş 0 áážááˇáş áááŽááŤ- áĄááááˇáşááŻáśá¸áááşáááŻá¸ááᯠáá˝áąá¸ááŤá
áĄááźáąáĄááąáá˛áˇ áĄá áŹá¸áááŻá¸áá˛áˇáĄá፠write_time && change_time áĄááźáŻáĄáá°áááş áážááşááááˇáşáááş-
- ááááşá¸áážááşáá áşáᯠáááŻáˇáááŻááş áážá áşááŻá ááŻáśá¸áááş 0 áážááˇáş áááŽááŤ- ááŻááááŻááşááąáŹ áááşáááŻá¸ááᯠáá˝áąá¸ááŤá
- ááááşá¸áážááşáážá áşááŻááŻáśá¸áááş 0 áážááˇáş áááŽááŤ- áĄááááˇáşááŻáśá¸áááşáááŻá¸ááᯠáá˝áąá¸ááŤá
áá áşáááŻááşá¸áá áşá á
á ááŹá¸áĄááŻáśá¸áĄáážáŻááşá¸á áĄááźá˛áážááşáááşá á¤ááąááŹáá˝ááş '&&' áĄáąáŹáşáááąááŹááᯠááŻáśá¸áááˇáşáááşá disk.c áááá
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 ááᯠáá áşááťáááşáááşá¸áá˝ááş áááááŻááşááŤá
áĄáááˇáşáĄáááşááážá á áŹááźáąáŹááşá¸áá°á¸ááźááşá¸á
'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);
....
}ááŻááşááąáŹááşááťááşáá áşááŻááŻáśá¸ááᯠáááşá á áşááąá¸ááąáŹáĄááŤá á¤ááŻááşáááş ááźáżááŹáááźá áşá áąááźáąáŹááşá¸ áážááşá¸ááŤáááşá áááŻáˇááŹáá˝ááşá áááşá¸áááŻáˇáááş áĄááŹáááşáá˝ááş ááźá áşááąáŤáşááŹáááŻááşáááş- ááááááşáá˝ááş ááźáąáŹááşá¸áá˛áážáŻáá áşááŻá ááťá˝ááşáŻááşáááŻáˇáááş ááźáŹá¸ááśáá˝ážááşá¸áááŻá¸áážáŻááᯠááážáááááˇáşáááş- sprintf áááşáááˇáşáĄááŹááž áááˇáşáááşáááŹá¸ááąáŹááźáąáŹááˇáş áááşá¸ááźáąáŹááşá¸ááťáŹá¸ááᯠááąáŤááşá¸á ááşáááŻááşááąáŹáĄááŤáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş array áááşááááááşááťáŹá¸ááᯠááťáąáŹáşáá˝ááşáá˝áŹá¸áááŻááşáááşá á¤ááąáŤáşáááŻáážáŻááᯠáááááźáŻáááááş áĄááźáśááźáŻáĄááşááŤáááşá snprintf(fullpathá PATH_MAXáâŚ.).
ááááŻááąáŹáˇáá˛áˇ áĄááźáąáĄááą
conditional expression á áĄá áááşáĄáááŻááşá¸áá áşááŻáááş áĄááźá˛áážááşáááş- 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
â open source RDP ááŹááŹááᯠáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸á áááąáŹááťááşááᯠáĄáááŻááşá¸ á áááŻááşá¸áá˝á˛ááŹá¸áááşá
- xrdp áááş ááááŻáááŻááąáŹááᯠáĄááąáŹááşáĄáááşááąáŹáşáážáŻáá áşááŻááźá áşáááşá Apache 2.0 áááŻááşá ááşáĄáąáŹááşáá˝ááş ááźááˇáşááąááŹá¸áááşá
- xorgxrdp â xrdp ááźááˇáş áĄááŻáśá¸ááźáŻáááşáĄáá˝ááş Xorg ááááŻááşááŹááťáŹá¸ áĄá áŻáśá áááŻááşá ááş â X11 (MIT áá˛áˇáááŻáˇá áááŻáˇááąáŹáş ááźáąáŹáşááźáŹáá˝ááş áĄááŻáśá¸ááźáŻááźááşá¸ááᯠááŹá¸ááźá áşááŹá¸áááş)
áááąáŹááťááşáá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáááş rdesktop áážááˇáş FreeRDP áááááşááťáŹá¸áĄááąáŤáşáĄááźáąááśáááşá áĄá áááŻááşá¸áá˝ááşá ááááşáá áşáážááˇáşáĄááŻááşááŻááşáááşá ááŽá¸ááźáŹá¸ VNC ááŹáᏠáááŻáˇáááŻááş RDP ááśáˇáááŻá¸áážáŻ- X11rdp ááŤááąáŹ áĄáá°á¸ X11 ááŹááŹááᯠáĄááŻáśá¸ááźáŻáááş áááŻáĄááşááąáŹáşáááşá¸ xorgxrdp áá˝ááşá¸ááŹá¸ááŹáááşáážááˇáşáĄááťáž áááşá¸áááŻáˇáĄáá˝ááş áááŻáĄááşááťááşááťáŹá¸ ááťáąáŹááşáá˝ááşáá˝áŹá¸áá˛áˇáááşá
á¤ááąáŹááşá¸ááŤá¸áááťá˝ááşáŻááşáááŻáˇáááş xorgxrdp áááŻáááááŤá
xrdp áááąáŹááťááşáááş ááááşáá˛áˇáááŻáˇáááş ááąá¸áááşááźáŽá¸ áááŻááşá¸ááąáŤááşá¸ 80 áááˇáş ááŤáááşááŤáááşá

áĄáážáŹá¸áááŻááťáŹá¸áááşá
ááŻááşáá˝ááş áĄááŹá¸áá°ááŻááşáá˝ááşááťáŹá¸ á áŻá ááşá¸áážáŻ ááŤáážááááşá 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 codec ááᯠáĄááŻáśá¸ááźáŻáááˇáş librfxcodec á áŹááźááˇáşáááŻááşááž ááŻááşáá°ááŹá¸ááŤáááşá á¤áá˝ááşá ááááşáá áşááąááŹááťááşáááşááťáŹá¸ ááąáŹáá˝áąá¸ááąááŻáśááááş - "áĄááźáŹááąáŹááş" áĄááąáŹááşáĄá áŹá¸ "áĄááŽááąáŹááş" ááŻááąá¸ááŹá¸áááşá ááąáŹáşááŽáá°á¸áááˇáşááźááşá¸á ááááşáĄááąááźááˇáş áááŻáááŻáˇááąáŹ áĄáážáŹá¸áĄáá˝ááşá¸ááťáŹá¸á á˝áŹ ááąáŤáşááŹááŤáááşá
áĄááŹá¸áá°ááźáżááŹáááşáááşá¸ áĄááŹá¸áá°ááŻááşááąáŹááşáážáŻáá áşááŻáá˝ááş ááąáŤáşááŹáááşá rfx_encode_format_argbáá˝á˛ááźááşá¸á áááşááźáŹáá°áážáááşá¸ ááťá˝ááşáŻááşáááŻáˇáĄáŹá¸ ááźáąáŹááźááŹá¸áááş-
ááŻááşáá˝ááş áĄááŹá¸áá°ááŻááşáá˝ááşááťáŹá¸ á áŻá ááşá¸áážáŻ ááŤáážááááşá 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++;
}Array ááźáąááźáŹááťááş
Array overrun ááźá áşáááŻááşáááşá '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];
....
}
....
}á¤áááŻááşáážá áşááŻáážá array á ááźáąááźáŹááťááşáážááˇáş áĄáááášááŤááşáá˝ááˇáşáááŻááťááşáááş ááááŹááááźá áşá፠- áĄáá˝ááşáĄá áŹá¸ 1 ááźááˇáş áá˝á˛ááźáŹá¸ááŤáááşá áááŻáˇááąáŹáşá áĄáážáŹá¸áĄáá˝ááşá¸ááážáá፠- áážááşáááşááąáŹáĄáá˝ááşáĄá áŹá¸ááᯠevdev-map.c áááŻááşáá˝ááş áááşáážááşááŹá¸ááąáŹááźáąáŹááˇáş áĄáááˇáşáĄáááşááážáááąáŹ áĄáážáŹá¸áĄáá˝ááşá¸ááážáááŤá ááŽááąáŹáˇ ááŤá áĄáá˝ááşááá° ááźááşáááŻáˇááá˛áˇ bug áá áşááŻááŤáá˛á
áážáŹá¸áá˝ááşá¸ááąáŹ áážááŻááşá¸áážááşáážáŻ
áĄááźáąáĄááąááąá¸ááąáŹáşááźááťááşá áĄá áááşáĄáááŻááşá¸áá áşááŻáááş áĄááźá˛áááşá¸ áážáŹá¸áá˝ááşá¸ááąáááş- (cap_len < 0)á xrdp_caps.c ááá
// 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. ááťá˝ááşáŻááşáááŻáˇáááş áááşáážááşááááŻá¸ááŹá¸ááąáŹ ááááşá¸áážááşááᯠáááşáážáŻááźáŽá¸ ááááşááᯠáááŻáááŻááźáŽá¸ááŹá¸ááąáŹ ááááşá¸áážááşáááŻáˇ áááşáážááşááąá¸ááąáŹááźáąáŹááˇáş á¤ááąááŹáá˝ááş á á áşááąá¸áááşááááŻáĄááşááŤá
ááááŻáĄááşááąáŹá á áşááąá¸áážáŻááťáŹá¸
áĄááźáąáĄááąáááŻááşááŹááąáŹáşááźááťááşá áĄá áááşáĄáááŻááşá¸áá áşááŻáááş áĄááźá˛áááşá¸áĄáážááşááźá áşáááş- (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;
}
....
}ááťá˝ááşáŻááşáááŻáˇáá˝ááş áĄá áááŻááşá¸áá˝ááş áážááŻááşá¸áážááşáážáŻáá áşááŻáážáááąááźáŽááźá áşááąáŹááźáąáŹááˇáş áááŽááťážáážáŻá á áşááąá¸áážáŻááťáŹá¸áááş á¤ááąááŹáá˝ááş áĄáááášááŹááşááážáááąá ááŤáᏠtypo áá áşááŻááźá áşááźáŽá¸ developer á áĄáąáŹáşáááąááŹááᯠáĄááŻáśá¸ááźáŻáááŻáˇ áááşáá˝ááşááŹá¸áᏠááźá áşáááŻááşáááşá || ááážááşáááşááąáŹ áĄááźáąáŹááşá¸ááźááťááşááťáŹá¸ááᯠá á áşááŻááşáááşá
ááąáŹááşááťááş
á á áşááąá¸á ááşáĄáá˝ááşá¸ ááźáŽá¸ááźáŽá¸ááŹá¸ááŹá¸ áĄáážáŹá¸áĄáá˝ááşá¸ááťáŹá¸ ááá˝áąáˇáá˛áˇáááąáŹáşáááşá¸ ááťááŻáˇáá˝ááşá¸ááťááşááťáŹá¸á á˝áŹ áá˝áąáˇáážááá˛áˇáááşá áááŻáˇááąáŹáşáááşá¸ á¤áááąáŹááťááşááťáŹá¸ááᯠáĄáá˝ááşáĄá áŹá¸ááąá¸áááşááąáŹáşáááşá¸ á áá áşááťáŹá¸á á˝áŹáá˝ááş áĄááŻáśá¸ááźáŻááŤáááşá áááąáŹááťááşáááşáá áşááŻáá˝ááş áĄáážáŹá¸áĄáá˝ááşá¸ááťáŹá¸á á˝áŹáážááááşááááŻáĄááşááŤá áááŻáˇááźáąáŹááˇáş áá˝á˛ááźááşá¸á áááşááźáŹáá°áá á˝ááşá¸ááąáŹááşáááşááᯠáááąáŹááťááşáááşááťáŹá¸áá˝ááşáᏠáĄáá˛ááźááşááźááşá¸áááźáŻáááˇáşááŤá ááŽáĄááźáąáŹááşá¸ááᯠááąáŹááşá¸ááŤá¸áážáŹ áááşáááşáááşáážáŻáááŻááşááŤáááş""á
PVS-Studio á áĄá ááşá¸ááŹá¸áážááşá¸ááᯠááťá˝ááşáŻááşáááŻáˇááśááž ááąáŤááşá¸ááŻááşááŻááşáááŻááşááŤáááşá .
á¤ááąáŹááşá¸ááŤá¸ááᯠáĄááşášáááááşá
ááŹá¸ááźáąáŹááááááşáážááˇáş ááťážááąáááŻááŤáá ááŹááŹááźááşáááˇáşááş- Sergey Larin ááᯠáĄááŻáśá¸ááźáŻááŤá
source: www.habr.com
