FreeRDP-แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒ—

FreeRDP-แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
FreeRDP แƒแƒ แƒ˜แƒก แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ Microsoft-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ›แƒแƒ’แƒ˜แƒ“แƒ˜แƒก แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก (RDP) แƒฆแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ. แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒ›แƒ แƒแƒ•แƒแƒš แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒแƒก, แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก Windows, Linux, macOS แƒ“แƒ iOS-แƒ˜แƒ—แƒแƒช แƒ™แƒ˜ Androidแƒ”แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒจแƒ”แƒ˜แƒ แƒฉแƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ˜แƒแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ”แƒซแƒฆแƒ•แƒœแƒ”แƒ‘แƒ RDP แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒก PVS-Studio แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒžแƒแƒขแƒแƒ แƒ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ FreeRDP แƒ’แƒแƒฉแƒœแƒ“แƒ แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ›แƒแƒ˜แƒ™แƒ แƒแƒกแƒแƒคแƒขแƒ›แƒ แƒ’แƒแƒฎแƒกแƒœแƒ แƒกแƒžแƒ”แƒชแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒกแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒก RDP แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒ› แƒ“แƒ แƒแƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ rdesktop แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒแƒ“แƒ Reverse Engineering-แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒก.

แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ, แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒ’แƒแƒฎแƒ“แƒ แƒแƒฎแƒแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ˜แƒ›แƒ“แƒ แƒแƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒ. แƒ›แƒแƒกแƒจแƒ˜ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ›แƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ›แƒ แƒฌแƒแƒ แƒ›แƒแƒจแƒ•แƒ แƒ™แƒแƒœแƒคแƒšแƒ˜แƒฅแƒขแƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก, แƒ แƒแƒ›แƒแƒช แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ˜แƒ rdesktop-แƒ˜แƒก แƒฉแƒแƒœแƒ’แƒšแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ - FreeRDP. แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒ’แƒแƒ•แƒ แƒชแƒ”แƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ GPLv2 แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ˜แƒ—, แƒ แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“แƒแƒช แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ แƒ›แƒ˜แƒกแƒ˜ แƒฎแƒ”แƒšแƒแƒฎแƒแƒšแƒ˜ แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ แƒ”แƒ‘แƒ Apache License v2-แƒ–แƒ”. แƒ—แƒฃแƒ›แƒชแƒ, แƒงแƒ•แƒ”แƒšแƒ แƒแƒ  แƒ“แƒแƒ—แƒแƒœแƒฎแƒ›แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒแƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ›แƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒก แƒ’แƒแƒ“แƒแƒ”แƒฌแƒ”แƒ แƒแƒ— แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜, แƒ แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“แƒแƒช แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒแƒ–แƒ.

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ›แƒ”แƒขแƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒ‘แƒšแƒแƒ’แƒ˜แƒก แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ  แƒžแƒแƒกแƒขแƒจแƒ˜: โ€žFreeRDP แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒโ€œ.

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

แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ›แƒ”แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ.

แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ

V773 แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ 'cwd' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ’แƒแƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. แƒ’แƒแƒ แƒ”แƒ›แƒ.c 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;
  ....
}

แƒ”แƒก แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ winpr แƒฅแƒ•แƒ”แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒ“แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก WINAPI แƒจแƒ”แƒคแƒฃแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒ-Windows แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜, แƒแƒœแƒฃ แƒ”แƒก Wine-แƒ˜แƒก แƒ›แƒกแƒฃแƒ‘แƒฃแƒฅแƒ˜ แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒ. แƒแƒฅ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒ’แƒแƒŸแƒแƒœแƒ•แƒ: แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒก getcwd, แƒ˜แƒฎแƒกแƒœแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก. แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ–แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒฃแƒคแƒแƒกแƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒ”แƒ›แƒ™แƒ•แƒ˜แƒ“แƒ แƒ”.

แƒ›แƒแƒกแƒ˜แƒ•แƒ˜ แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ‘แƒก แƒ’แƒแƒ แƒ”แƒ—

V557 แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒ’แƒแƒ“แƒแƒคแƒแƒ แƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ. 'event->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++;
  }
  ....
}

แƒ”แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒแƒ›แƒแƒขแƒ”แƒ‘แƒก แƒแƒฎแƒแƒš แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒก แƒกแƒ˜แƒแƒจแƒ˜ แƒ›แƒแƒจแƒ˜แƒœแƒแƒช แƒ™แƒ˜, แƒ—แƒฃ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒ› แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒฃแƒ›แƒก แƒ›แƒ˜แƒแƒฆแƒฌแƒ˜แƒ. แƒแƒฅ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ <= on <, แƒ แƒแƒ—แƒ แƒแƒ  แƒ’แƒแƒกแƒชแƒ“แƒ”แƒก แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ‘แƒก.

แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ˜แƒšแƒ˜แƒ แƒแƒ› แƒขแƒ˜แƒžแƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ:

  • V557 แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒ’แƒแƒ“แƒแƒคแƒแƒ แƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ. 'iBitmapFormat' แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒแƒ› แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ˜แƒแƒฆแƒฌแƒ˜แƒแƒก 8-แƒก. orders.c 2623

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

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ 1

V547 แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ '!pipe->In' แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒชแƒ“แƒแƒ แƒ˜แƒ. 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_last - แƒ‘แƒแƒšแƒ แƒ แƒแƒ›. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ’แƒแƒœแƒแƒ”แƒ‘แƒ˜ แƒ˜แƒ“แƒ”แƒœแƒขแƒฃแƒ แƒ˜แƒ! แƒ“แƒ˜แƒ“แƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ—, แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ แƒ“แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒจแƒ˜แƒ trio_index_last แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ strhrchr แƒœแƒแƒชแƒ•แƒšแƒแƒ“ strchr. แƒ›แƒแƒจแƒ˜แƒœ แƒฅแƒชแƒ”แƒ•แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ›แƒแƒกแƒแƒšแƒแƒ“แƒœแƒ”แƒšแƒ˜.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ 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) {โ€ฆ} else 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);
  }
  ....
}

แƒ‘แƒแƒšแƒ แƒแƒ แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒ: แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ•แƒ˜แƒฆแƒแƒชแƒแƒ› แƒ“แƒแƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’. แƒ™แƒแƒ“แƒ˜แƒ“แƒแƒœ แƒจแƒ”แƒกแƒแƒ›แƒฉแƒœแƒ”แƒ•แƒ˜แƒ, แƒ แƒแƒ› แƒ‘แƒแƒšแƒ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒแƒ—แƒฎแƒ‘แƒแƒ˜แƒขแƒ˜แƒแƒœแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒ—, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ•แƒ˜แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ—, แƒ แƒแƒ› แƒ‘แƒแƒšแƒ แƒžแƒ˜แƒ แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ <= 0x3FFFFFFFF.

แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ˜แƒšแƒ˜แƒ แƒแƒ› แƒขแƒ˜แƒžแƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ:

  • V517 แƒ’แƒแƒ›แƒแƒ•แƒšแƒ˜แƒœแƒ“แƒ "if (A) {โ€ฆ} else if (A) {...}" แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ˜แƒก แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 169, 173. แƒคแƒแƒ˜แƒšแƒ˜.c 169

แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒ

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ 1

V547 แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ 'strcat(แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ”, แƒฌแƒงแƒแƒ แƒ) != 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);
}

แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜แƒ. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ strcat แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก, แƒ”.แƒ˜. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ แƒ’แƒแƒ•แƒ˜แƒ“แƒ. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒแƒกแƒ”แƒ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ”. แƒ—แƒฃแƒ›แƒชแƒ แƒ—แƒฃ แƒ—แƒแƒœแƒแƒ‘แƒแƒ แƒ˜แƒ NULL, แƒ›แƒแƒจแƒ˜แƒœ แƒฃแƒ™แƒ•แƒ” แƒ’แƒ•แƒ˜แƒแƒœแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒจแƒ˜แƒ strcat แƒ˜แƒ’แƒ˜ แƒ’แƒแƒฃแƒฅแƒ›แƒ“แƒ”แƒ‘แƒ.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ 2

V547 แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ "แƒฅแƒ”แƒจแƒ˜" แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ. แƒ’แƒšแƒ˜แƒคแƒ˜.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)
  {
    ....
  }
  ....
}

แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ˜ cache แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ glyphCache->glyphCache. แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒ—แƒฃ (แƒฅแƒ”แƒจแƒ˜) แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒขแƒแƒ•แƒ“แƒ”แƒก.

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

V1005 แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ˜ แƒจแƒ”แƒซแƒ”แƒœแƒ˜แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ "CreateFileA" แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ แƒจแƒ”แƒฃแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ”แƒšแƒ˜ "fclose" แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒแƒฌแƒ›แƒแƒ‘แƒ.c 447

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;
  }
  ....
}

แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒ›แƒฌแƒ”แƒ แƒ˜ fp, แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒคแƒแƒ˜แƒšแƒ˜ แƒ“แƒแƒ˜แƒฎแƒฃแƒ แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒ— แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒ— fclose แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒ“แƒแƒœ, แƒแƒ แƒ CloseHandle.

แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜

V581 แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒ— แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ โ€žแƒ—แƒฃโ€œ แƒ’แƒแƒœแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ˜แƒ“แƒ”แƒœแƒขแƒฃแƒ แƒ˜แƒ. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 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 แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒก "แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒแƒš" แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜. 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 แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒก "แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒแƒš" แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜. แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ.c 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));
  ....
}

แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒก แƒ›แƒแƒขแƒแƒœแƒ แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒชแƒ•แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ’แƒแƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒขแƒ˜แƒžแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— int.

แƒžแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒแƒจแƒ˜

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 'rdpei' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 176, 180. rdpei_main.c 176
  • V595 'gdi' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ nullptr-แƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 121, 123. xf_gfx.c 121

แƒฃแƒแƒ–แƒ แƒ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ

V547 แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ 'rdp->state >= CONNECTION_STATE_ACTIVE' แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ. แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜.c 1489 แƒฌ

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 แƒขแƒ˜แƒžแƒ˜แƒก. แƒžแƒ แƒแƒฅแƒกแƒ˜.c 220

V560 แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ: (rc >= 0). แƒžแƒ แƒแƒฅแƒกแƒ˜.c 222

static BOOL check_no_proxy(....)
{
  ....
  int sub;
  int rc = sscanf(range, "%u", &sub);

  if ((rc == 1) && (rc >= 0))
  {
    ....
  }
  ....
}

แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ• แƒ’แƒแƒกแƒชแƒ”แƒ›แƒก 2 แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒแƒก แƒแƒ› แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒกแƒžแƒ”แƒชแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜ %u แƒ›แƒแƒ”แƒšแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฃแƒฌแƒ”แƒ แƒ”แƒšแƒ˜ int, แƒ›แƒแƒ’แƒ แƒแƒ› แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒฅแƒ•แƒ” แƒแƒฅแƒ•แƒก แƒขแƒ˜แƒžแƒ˜ int. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒกแƒแƒ”แƒญแƒ•แƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒก: แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒก แƒ›แƒแƒ แƒฏแƒ•แƒœแƒ˜แƒ• แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒแƒฅแƒ•แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœแƒ•แƒ” แƒแƒ แƒ˜แƒก แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ—แƒแƒœ. แƒแƒ  แƒ•แƒ˜แƒชแƒ˜ แƒ แƒแƒก แƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒแƒ‘แƒ“แƒ แƒแƒ› แƒ™แƒแƒ“แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅ แƒ แƒแƒฆแƒแƒช แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜แƒ.

แƒ›แƒฌแƒงแƒแƒ‘แƒ แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒกแƒฃแƒšแƒ˜ แƒฉแƒ”แƒ™แƒ”แƒ‘แƒ˜

V547 แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ 'status == 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;
}

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒแƒ›แƒ’แƒ•แƒแƒ แƒแƒ“, แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒ› แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ’แƒแƒ›แƒแƒแƒ•แƒšแƒ˜แƒœแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ›แƒแƒ—แƒ˜ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ˜แƒงแƒ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜. แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒ—แƒแƒ•แƒแƒ“ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒœ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ•แƒ”แƒ‘แƒกแƒแƒ˜แƒขแƒ–แƒ” แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ— PVS- แƒกแƒขแƒฃแƒ“แƒ˜แƒ. แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒงแƒ แƒชแƒ แƒฃ แƒ“แƒแƒ“แƒ”แƒ‘แƒ˜แƒ—แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ–แƒ”แƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒฎแƒ”แƒšแƒก แƒจแƒ”แƒฃแƒฌแƒงแƒแƒ‘แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒแƒก. แƒ—แƒฃแƒ›แƒชแƒ, แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ, แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ’แƒแƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒจแƒ”แƒแƒ›แƒชแƒ˜แƒ แƒแƒ— แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒแƒ–แƒ” แƒ“แƒแƒฎแƒแƒ แƒฏแƒฃแƒšแƒ˜ แƒ“แƒ แƒ แƒ“แƒ แƒแƒ›แƒแƒจแƒ˜ แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒแƒ— PVS-Studio.

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

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

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

แƒจแƒ”แƒ˜แƒซแƒ˜แƒœแƒ”แƒ— แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒ แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ˜ DDoS แƒ“แƒแƒชแƒ•แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒกแƒแƒ˜แƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, VPS VDS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก ๐Ÿ”ฅ แƒจแƒ”แƒ˜แƒซแƒ˜แƒœแƒ”แƒ— แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒ แƒ•แƒ”แƒ‘แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ˜ DDoS แƒ“แƒแƒชแƒ•แƒ˜แƒ—, VPS VDS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜ | ProHoster