diff --git a/reactos/base/applications/mstsc/settings.c b/reactos/base/applications/mstsc/settings.c index 29a6d47ba30..535f8ef77bb 100644 --- a/reactos/base/applications/mstsc/settings.c +++ b/reactos/base/applications/mstsc/settings.c @@ -230,6 +230,7 @@ ParseSettings(PRDPSETTINGS pRdpSettings, { LPWSTR lpStr = lpBuffer; WCHAR szSeps[] = L":\r\n"; + WCHAR szNewline[] = L"\r\n"; LPWSTR lpToken; BOOL bFound; INT i; @@ -258,7 +259,7 @@ ParseSettings(PRDPSETTINGS pRdpSettings, else if (lpToken[0] == L's') { pRdpSettings->pSettings[i].Type = lpToken[0]; - lpToken = wcstok(NULL, szSeps); + lpToken = wcstok(NULL, szNewline); if (lpToken != NULL) wcscpy(pRdpSettings->pSettings[i].Value.s, lpToken); } @@ -268,10 +269,7 @@ ParseSettings(PRDPSETTINGS pRdpSettings, /* move past the type and value */ if (!bFound) - { - lpToken = wcstok(NULL, szSeps); - lpToken = wcstok(NULL, szSeps); - } + lpToken = wcstok(NULL, szNewline); /* move to next key */ lpToken = wcstok(NULL, szSeps); diff --git a/reactos/base/applications/mstsc/win32.c b/reactos/base/applications/mstsc/win32.c index c7c4e63361b..8c9a9e17cca 100644 --- a/reactos/base/applications/mstsc/win32.c +++ b/reactos/base/applications/mstsc/win32.c @@ -958,6 +958,29 @@ mi_paint_rect(char * data, int width, int height, int x, int y, int cx, int cy) } +static INT +GetPortNumber(PCHAR szAddress) +{ + PCHAR szPort; + INT iPort = TCP_PORT_RDP; + + szPort = strtok(szAddress, ":"); + + if (szPort != NULL) + { + szPort = strtok(NULL, ":"); + + if (szPort != NULL) + { + iPort = atoi(szPort); + + if (iPort <= 0 || iPort > 0xFFFF) + iPort = TCP_PORT_RDP; + } + } + + return iPort; +} static BOOL ParseCommandLine(LPWSTR lpCmdLine, @@ -1051,8 +1074,9 @@ wWinMain(HINSTANCE hInstance, uni_to_str(szValue, GetStringFromSettings(pRdpSettings, L"full address")); + /* GetPortNumber also removes possible trailing port number from address */ + g_tcp_port_rdp = GetPortNumber(szValue); strcpy(g_servername, szValue); - //g_port = 3389; strcpy(g_username, ""); strcpy(g_password, ""); g_server_depth = GetIntegerFromSettings(pRdpSettings, L"session bpp");