рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдлреНрд░реАрдЖрд░рдбреАрдкреА рдХреА рдЬрд╛рдБрдЪ

рдЪрд┐рддреНрд░ 2

FreeRDP Microsoft рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рджреВрд░рд╕реНрде рдбреЗрд╕реНрдХрдЯреЙрдк рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (RDP) рдХрд╛ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕, рдореИрдХрдУрдПрд╕ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рд╕рд╣рд┐рдд рдХрдИ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рд╣рдордиреЗ рдЗрд╕реЗ рдЖрд░рдбреАрдкреА-рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдЪреЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ред

рдХреБрдЫ рдЗрддрд┐рд╣рд╛рд╕


Microsoft рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ RDP рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж FreeRDP рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рдереАред рдЙрд╕ рд╕рдордп, rdesktop рдирд╛рдордХ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдореЗрдВ рдерд╛, рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЗ рдХрд╛рдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рдереЗ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдкрд╛рдпрд╛ред рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдиреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдШрд░реНрд╖ рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ рдФрд░ рдлреНрд░реА рд╣реЛрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдиреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░реЗрдХрд╕реНрдХреЛрдк рдХрд╛ рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред рдЖрдЧреЗ рд╡рд┐рддрд░рдг GPLv2 рд▓рд╛рдЗрд╕реЗрдВрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдерд╛, рдФрд░ рд▓реЗрдЦрдХреЛрдВ рдиреЗ Apache рд▓рд╛рдЗрд╕реЗрдВрд╕ v2 рдХреЗ рд▓рд┐рдП рдЕрд╡рд╢реЗрд╖ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рд▓реЛрдЧ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рдереЗ, рдЗрд╕рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдХреЛрдб рдмреЗрд╕ рдХреЛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣реА рдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдЬ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдЖрдпрд╛ рд╣реИред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреВрд░рд╛ рдЗрддрд┐рд╣рд╛рд╕ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмреНрд▓реЙрдЧ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ: " рдлреНрд░реАрдЖрд░рдбреАрдкреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ "ред

рдореИрдВрдиреЗ рдмрдЧреНрд╕ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдХреИрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реА, рд╕реА ++, рд╕реА #, рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕, рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рдмрдЧреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреЗред

рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡


V773 'cwd' рдкреЙрдЗрдВрдЯрд░ рдЬрд╛рд░реА рдХрд┐рдП рдмрд┐рдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╕рдВрднрд╡ рд╣реИред рдкрд░реНрдпрд╛рд╡рд░рдгред 84рек

DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer) { char* cwd; .... cwd = getcwd(NULL, 0); .... if (lpBuffer == NULL) { free(cwd); return 0; } if ((length + 1) > nBufferLength) { free(cwd); return (DWORD) (length + 1); } memcpy(lpBuffer, cwd, length + 1); return length; .... } 

рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ рд╡рд┐рдЬреЗрддрд╛ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЖрддрд╛ рд╣реИ, рдЬреЛ рдЧреИрд░-рд╡рд┐рдВрдбреЛрдЬ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ WinAPI рдЖрд╡рд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рд╡рд╛рдЗрди рдХреЗ рдПрдХ рд╣рд▓реНрдХреЗ рд╕рдордХрдХреНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдореЗрдореЛрд░реА рд░рд┐рд╕рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ: рдЧреЗрдЯрдХрд╡рд░реНрдб рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖-рдХреЗрд╕ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдЬрд╛рд░реА рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдХреЙрд▓ рдХреЛ рдореБрдлреНрдд рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реАрдорд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░


V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'рдЗрд╡реЗрдВрдЯ-> EventHandlerCount' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди 32 рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИред PubSub.c 117

 #define MAX_EVENT_HANDLERS 32 struct _wEventType { .... int EventHandlerCount; pEventHandler EventHandlers[MAX_EVENT_HANDLERS]; }; int PubSub_Subscribe(wPubSub* pubSub, const char* EventName, pEventHandler EventHandler) { .... if (event->EventHandlerCount <= MAX_EVENT_HANDLERS) { event->EventHandlers[event->EventHandlerCount] = EventHandler; event->EventHandlerCount++; } .... } 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рдирдпрд╛ рддрддреНрд╡ рд╕реВрдЪреА рдореЗрдВ рддрдм рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХрддрдо рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реЛред рдпрд╣ рдмрдЧ рдХреЗрд╡рд▓ <= рдСрдкрд░реЗрдЯрд░ рдХреЛ <рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдФрд░ рдмрдЧ рдкрд╛рдпрд╛:

  • V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'IBitmapFormat' рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдорд╛рди 8. рдЖрджреЗрд╢реЛрдВ 2623 рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИ

рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐рдпрд╛рдВ


рд╕реНрдирд┐рдкреЗрдЯ 1


V547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдкрд╛рдЗрдк!> рдореЗрдВ' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред MessagePipe.c 63

 wMessagePipe* MessagePipe_New() { .... pipe->In = MessageQueue_New(NULL); if (!pipe->In) goto error_in; pipe->Out = MessageQueue_New(NULL); if (!pipe->In) // <= goto error_out; .... 

}

рд╣рдо рдпрд╣рд╛рдВ рдЬреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯрд╛рдЗрдкреЛ рд╣реИ: рдкрд╣рд▓реА рдФрд░ рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐ рджреЛрдиреЛрдВ рдПрдХ рд╣реА рдЪрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЦрд░рд╛рдм рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдЙрддреНрдкрд╛рдж рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

рд╕реНрдирд┐рдкреЗрдЯ 2


V760 рдкрд╛рда рдХреЗ рджреЛ рд╕рдорд╛рди рдЦрдВрдб рдкрд╛рдП рдЧрдПред рджреВрд╕рд░рд╛ рдмреНрд▓реЙрдХ рд▓рд╛рдЗрди 771 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред tsg.c 770

 typedef struct _TSG_PACKET_VERSIONCAPS { .... UINT16 majorVersion; UINT16 minorVersion; .... } TSG_PACKET_VERSIONCAPS, *PTSG_PACKET_VERSIONCAPS; static BOOL TsProxyCreateTunnelReadResponse(....) { .... PTSG_PACKET_VERSIONCAPS versionCaps = NULL; .... /* MajorVersion (2 bytes) */ Stream_Read_UINT16(pdu->s, versionCaps->majorVersion); /* MinorVersion (2 bytes) */ Stream_Read_UINT16(pdu->s, versionCaps->majorVersion); .... } 

рдПрдХ рдЕрдиреНрдп рдЯрд╛рдЗрдкреЛ: рдЯрд┐рдкреНрдкрдгреА рдХрд╣рддреА рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдореВрд▓реА рд╡реЗрд░рд┐рдПрдмрд▓ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреА рдЙрдореНрдореАрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ рд╡реИрд▓реНрдпреВ рдХреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рд╡реЗрд░рд┐рдПрд╢рди рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рд╕реНрдирд┐рдкреЗрдЯ 3


V524 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ 'trio_index_last' рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ 'trio_index' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордХрдХреНрд╖ рд╣реИред triostr.c 933

 /** Find first occurrence of a character in a string. .... */ TRIO_PUBLIC_STRING char * trio_index TRIO_ARGS2((string, character), TRIO_CONST char *string, int character) { assert(string); return strchr(string, character); } /** Find last occurrence of a character in a string. .... */ TRIO_PUBLIC_STRING char * trio_index_last TRIO_ARGS2((string, character), TRIO_CONST char *string, int character) { assert(string); return strchr(string, character); } 

рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, trio_index рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд╣рд▓рд╛ рд╡рд░реНрдг рдШрдЯрдирд╛ рдкрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ trio_index_last рдлрд╝рдВрдХреНрд╢рди рдЕрдВрддрд┐рдо рдШрдЯрдирд╛ рдкрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рднреА рдЗрди рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╢рд░реАрд░ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИрдВ! рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ trio_index_last рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрднрд╡рддрдГ рд╕реНрдЯреНрд░реИрдЪ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯреНрд░реНрд░рдЪ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред

рд╕реНрдирд┐рдкреЗрдЯ 4


V769 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ 'рдбреЗрдЯрд╛' рд╕реВрдЪрдХ nullptr рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЗрд╕ рд╕реВрдЪрдХ рдкрд░ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рд╕рдВрд╡реЗрджрдирд╣реАрди рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред nsc_encode.c 124

 static BOOL nsc_encode_argb_to_aycocg(NSC_CONTEXT* context, const BYTE* data, UINT32 scanline) { .... if (!context || data || (scanline == 0)) return FALSE; .... src = data + (context->height - 1 - y) * scanline; .... } 

рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдЧрд▓рддреА рд╕реЗ рдирд┐рдЧреЗрдЯрд┐рд╡ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реЛрдЧрд╛ ! рдбреЗрдЯрд╛ рд╕реЗ рдкрд╣рд▓реЗред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рджрд┐рдпрд╛ред

рд╕реНрдирд┐рдкреЗрдЯ 5


V517 'if (A) {...} рдХрд╛ рдЙрдкрдпреЛрдЧ if (A) {...}' рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрди: 213, 222. rdpei_common.c 213

 BOOL rdpei_write_4byte_unsigned(wStream* s, UINT32 value) { BYTE byte; if (value <= 0x3F) { .... } else if (value <= 0x3FFF) { .... } else if (value <= 0x3FFFFF) { byte = (value >> 16) & 0x3F; Stream_Write_UINT8(s, byte | 0x80); byte = (value >> 8) & 0xFF; Stream_Write_UINT8(s, byte); byte = (value & 0xFF); Stream_Write_UINT8(s, byte); } else if (value <= 0x3FFFFF) { byte = (value >> 24) & 0x3F; Stream_Write_UINT8(s, byte | 0xC0); byte = (value >> 16) & 0xFF; Stream_Write_UINT8(s, byte); byte = (value >> 8) & 0xFF; Stream_Write_UINT8(s, byte); byte = (value & 0xFF); Stream_Write_UINT8(s, byte); } .... } 

рдЕрдВрддрд┐рдо рджреЛ рд╢рд░реНрддреЗрдВ рд╕рдорд╛рди рд╣реИрдВ: рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХреЙрдкреА рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдпрд╛ рд╣реЛрдЧрд╛ред рдХреЛрдб рдХреЗ рддрд░реНрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЕрдВрддрд┐рдо рднрд╛рдЧ рдЪрд╛рд░-рдмрд╛рдЗрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдореВрд▓реНрдп <= 0x3FFFFFFF рд╣реИ ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдФрд░ рдмрдЧ:

  • V517 'if (A) {...} рдХрд╛ рдЙрдкрдпреЛрдЧ if (A) {...}' рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 169, 173. file.c 169

рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛


рд╕реНрдирд┐рдкреЗрдЯ 1


V547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд╕реНрдЯреНрд░реИрдЯ (рд▓рдХреНрд╖реНрдп, рд╕реНрд░реЛрдд)! = NULL' рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИред triostr.c 425

 TRIO_PUBLIC_STRING int trio_append TRIO_ARGS2((target, source), char *target, TRIO_CONST char *source) { assert(target); assert(source); return (strcat(target, source) != NULL); } 

рдлрд╝рдВрдХреНрд╢рди рдХреА рд╡рд╛рдкрд╕реА рдорд╛рди рдХреА рдЬрд╛рдВрдЪ рджреЛрд╖рдкреВрд░реНрдг рд╣реИред рд╕реНрдЯреНрд░реИрдХрдЯ рдлрд╝рдВрдХреНрд╢рди рд▓рдХреНрд╖реНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рдХреНрд╖реНрдп рд╣реИ ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ NULL рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рд╕реНрдЯреНрд░реИрдХрдЯ рдлрдВрдХреНрд╢рди рдореЗрдВ рдбрд┐рд░реЗрд▓ рд╣реЛ рдЪреБрдХрд╛ рд╣реЛрдЧрд╛ред

рд╕реНрдирд┐рдкреЗрдЯ 2


V547 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'рдХреИрд╢' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред glyph.c 730

 typedef struct rdp_glyph_cache rdpGlyphCache; struct rdp_glyph_cache { .... GLYPH_CACHE glyphCache[10]; .... }; void glyph_cache_free(rdpGlyphCache* glyphCache) { .... GLYPH_CACHE* cache = glyphCache->glyphCache; if (cache) { .... } .... } 

рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ, рдХреИрд╢ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдРрд░реЗ рдЧреНрд▓рд╛рдЗрдлреЗрдЪреЗ-> рдЧреНрд▓рд┐рдлрд╝рдХреИрдЪ рдХрд╛ рдкрддрд╛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЪреЗрдХ (рдпрджрд┐) рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрди рддреНрд░реБрдЯрд┐


V1005 рд╕рдВрд╕рд╛рдзрди 'CreateFileA' рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЕрд╕рдВрдЧрдд 'fclose' рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рдорд╛рдг рдкрддреНрд░ред рекрек 44

 BOOL certificate_data_replace(rdpCertificateStore* certificate_store, rdpCertificateData* certificate_data) { HANDLE fp; .... fp = CreateFileA(certificate_store->file, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); .... if (size < 1) { CloseHandle(fp); return FALSE; } .... if (!data) { fclose(fp); return FALSE; } .... } 

CreateFile рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ fp рд╣реИрдВрдбрд▓ рдлрд╝рдВрдХреНрд╢рди рдмрдВрджрд╣реИрдВрдбрд▓ рдХреЗ рдмрдЬрд╛рдп рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░реЗрд░реА рд╕реЗ рдлрд╝реЗрдХреЛрдЬрд╝ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЧрд▓рддреА рд╕реЗ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рдерд╛ред

рдкрд╣рдЪрд╛рди рдХреА рд╕реНрдерд┐рддрд┐


V581 рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рдд 'if' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╢рд░реНрдд рднрд╛рд╡ рд╕рдорд╛рди рд╣реИрдВред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 269, 283. ndr_structure.c 283

 void NdrComplexStructBufferSize(PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat) { .... if (conformant_array_description) { ULONG size; unsigned char array_type; array_type = conformant_array_description[0]; size = NdrComplexStructMemberSize(pStubMsg, pFormat); WLog_ERR(TAG, "warning: NdrComplexStructBufferSize array_type: " "0x%02X unimplemented", array_type); NdrpComputeConformance(pStubMsg, pMemory + size, conformant_array_description); NdrpComputeVariance(pStubMsg, pMemory + size, conformant_array_description); MaxCount = pStubMsg->MaxCount; ActualCount = pStubMsg->ActualCount; Offset = pStubMsg->Offset; } if (conformant_array_description) { unsigned char array_type; array_type = conformant_array_description[0]; pStubMsg->MaxCount = MaxCount; pStubMsg->ActualCount = ActualCount; pStubMsg->Offset = Offset; WLog_ERR(TAG, "warning: NdrComplexStructBufferSize array_type: " "0x%02X unimplemented", array_type); } .... } 

рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╕рдВрджреЗрд╢ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрднрд╡рддрдГ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред

рдирд┐: рд╢реБрд▓реНрдХ рдЕрд╢рдХреНрдд рд╕рдВрдХреЗрдд


V575 null рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'рдлреНрд░реА' рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВред smartcard_pcsc.c 875

 WINSCARDAPI LONG WINAPI PCSC_SCardListReadersW( SCARDCONTEXT hContext, LPCWSTR mszGroups, LPWSTR mszReaders, LPDWORD pcchReaders) { LPSTR mszGroupsA = NULL; .... mszGroups = NULL; /* mszGroups is not supported by pcsc-lite */ if (mszGroups) ConvertFromUnicode(CP_UTF8,0, mszGroups, -1, (char**) &mszGroupsA, 0, NULL, NULL); status = PCSC_SCardListReaders_Internal(hContext, mszGroupsA, (LPSTR) &mszReadersA, pcchReaders); if (status == SCARD_S_SUCCESS) { .... } free(mszGroupsA); .... } 

рдирд┐ : рд╢реБрд▓реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдкреЙрдЗрдВрдЯрд░ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛ред

MszGroupsA рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╢реБрд░реВ рдореЗрдВ NULL рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╢рд╛рдЦрд╛ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рд╡рд╣ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА:

  • V575 null рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'рдлреНрд░реА' рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рд▓рд╛рдЗрд╕реЗрдВрд╕ред 790
  • V575 null рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'рдлреНрд░реА' рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВред rdpsnd_alsa.c 575

рдкрд░рд┐рддреНрдпрдХреНрдд рдЪрд░ рдЬреИрд╕реЗ рдХрд┐ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдЫреЛрдбрд╝реЗ рдЧрдП рдЕрд╡рд╢реЗрд╖ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрднрд╛рд╡рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣


V1028 рд╕рдВрднрд╛рд╡рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ред рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдСрдкрд░реЗрдВрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВред makecert.c 1087

 // openssl/x509.h ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); struct _MAKECERT_CONTEXT { .... int duration_years; int duration_months; }; typedef struct _MAKECERT_CONTEXT MAKECERT_CONTEXT; int makecert_context_process(MAKECERT_CONTEXT* context, ....) { .... if (context->duration_months) X509_gmtime_adj(after, (long)(60 * 60 * 24 * 31 * context->duration_months)); else if (context->duration_years) X509_gmtime_adj(after, (long)(60 * 60 * 24 * 365 * context->duration_years)); .... } 

рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд░рдиреЗ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓реНрдпрд╛рдВрдХрди рдЕрднреА рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рдЕрднреА рднреА рдЯрд╛рдЗрдк рдЗрдВрдЯ рдХрд╛ рд╣реИ ред

рдЖрд░рдВрднреАрдХрд░рдг рдкрд░ рд╕реВрдЪрдХ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдирд╛


V595 nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рд╕рдВрджрд░реНрдн' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 746, 748. gfx.c 746

 static UINT gdi_SurfaceCommand(RdpgfxClientContext* context, const RDPGFX_SURFACE_COMMAND* cmd) { .... rdpGdi* gdi = (rdpGdi*) context->custom; if (!context || !cmd) return ERROR_INVALID_PARAMETER; .... } 

рд╕рдВрджрд░реНрдн рд╕реВрдЪрдХ рдХреЛ рдЗрд╕рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рджреМрд░рд╛рди, рдЪреЗрдХ рд╕реЗ рдкрд╣рд▓реЗ, рдЕрд░реНрдерд╛рдд

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреНрдп рдХреАрдбрд╝реЗ:

  • V595 'ntlm' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 236, 255. ntlm.c 236
  • V595 nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рд╕рдВрджрд░реНрдн' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1003, 1007. rfx.c 1003
  • V595 ndptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'rdpei' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 176, 180. rdpei_main.c 176
  • V595 nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'gdi' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 121, 123. xf_gfx.c 121

рдЕрд░реНрдерд╣реАрди рд╕реНрдерд┐рддрд┐


V547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'rdp-> рд░рд╛рдЬреНрдп> = CONNECTION_STATE_ACTIVE' рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИред рдХрдиреЗрдХреНрд╢рдиред резрек.c реп

 int rdp_server_transition_to_state(rdpRdp* rdp, int state) { .... switch (state) { .... case CONNECTION_STATE_ACTIVE: rdp->state = CONNECTION_STATE_ACTIVE; // <= .... if (rdp->state >= CONNECTION_STATE_ACTIVE) // <= { IFCALLRET(client->Activate, client->activated, client); if (!client->activated) return -1; } .... } .... } 

рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдкрд╣рд▓реА рд╢рд░реНрдд рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╢реНрди рдореЗрдВ рдореВрд▓реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛ред

рдЧрд▓рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИрдВрдбрд▓рд┐рдВрдЧ


V576 рдЧрд▓рдд рдкреНрд░рд╛рд░реВрдкред 'Sscanf' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддреАрд╕рд░реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд int рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рдЫрджреНрдо 220

V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ: (рдЖрд░рд╕реА> = 0)ред рдЫрджреНрдо 222

 static BOOL check_no_proxy(....) { .... int sub; int rc = sscanf(range, "%u", &sub); if ((rc == 1) && (rc >= 0)) { .... } .... } 

рдпрд╣ рдХреЛрдб рдПрдХ рдмрд╛рд░ рдореЗрдВ рджреЛ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред % U рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХрд╛рд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд int рдХреЗ рдЪрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЙрдк рдЪрд░ рдкреНрд░рдХрд╛рд░ int рдХрд╛ рд╣реЛрддрд╛ рд╣реИ ред рджреВрд╕рд░реА рдЪреЗрддрд╛рд╡рдиреА рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдЬрд╛рдБрдЪ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ: рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╕рд╣реА рд╣рд┐рд╕реНрд╕рд╛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╛рдПрдВ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ 1 рдХреЗ рд▓рд┐рдП рдЪрд░ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдереАред рдореИрдВ рд▓реЗрдЦрдХ рдХреЗ рдЗрд░рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реИред

рдЧрд▓рдд рдХреНрд░рдо рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ


V547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд╕реНрдерд┐рддрд┐ == 0x00090314' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реЛрддреА рд╣реИред ntlm.c 299

 BOOL ntlm_authenticate(rdpNtlm* ntlm, BOOL* pbContinueNeeded) { .... if (status != SEC_E_OK) { .... return FALSE; } if (status == SEC_I_COMPLETE_NEEDED) // <= status = SEC_E_OK; else if (status == SEC_I_COMPLETE_AND_CONTINUE) // <= status = SEC_I_CONTINUE_NEEDED; .... } 

рдЪрд┐рд╣реНрдирд┐рдд рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реЛрдВрдЧреА рдХреНрдпреЛрдВрдХрд┐ рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕реНрдерд┐рддрд┐ == SEC_E_OK ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ:

 if (status == SEC_I_COMPLETE_NEEDED) status = SEC_E_OK; else if (status == SEC_I_COMPLETE_AND_CONTINUE) status = SEC_I_CONTINUE_NEEDED; else if (status != SEC_E_OK) { .... return FALSE; } 

рдирд┐рд╖реНрдХрд░реНрд╖


рдЪреЗрдХ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрдЧ рдкрд╛рдП рдЧрдП, рдФрд░ рдКрдкрд░ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рдЪрд░реНрдЪрд╛ рдХреА, рд╡реЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдХрдИ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛рдПрдВ рднреА рдЙрддреНрдкрдиреНрди рдХреАрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд░реЗрдВрдЧреЗред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИ рдпрджрд┐ рдЖрдкрдХрд╛ рд▓рдХреНрд╖реНрдп рди рдХреЗрд╡рд▓ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрдЧ рд╢рд┐рдХрд╛рд░ рдХреЛ рдХрдо рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдмрдирд╛рдирд╛ рд╣реИ - рдФрд░ рдпрд╣реА рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛рдо рдореЗрдВ рдЖрдПрдЧрд╛ред

Source: https://habr.com/ru/post/hi444246/


All Articles