From 5fb59a23a9f25f5996d7b015e20dcb5ce31208fb Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 16 Jun 2021 14:50:14 +0200 Subject: [PATCH] Fixed lots of compilation warnings and type mismatches --- channels/rdpgfx/server/rdpgfx_main.c | 2 +- channels/rdpsnd/server/rdpsnd_main.c | 2 +- client/Windows/wf_cliprdr.c | 4 ++-- client/Windows/wf_event.c | 4 ++-- client/common/file.c | 4 ++++ libfreerdp/codec/test/TestFreeRDPCodecClear.c | 4 ++++ libfreerdp/common/assistance.c | 22 +++++++++++-------- libfreerdp/common/test/TestCommonAssistance.c | 4 ++++ libfreerdp/core/autodetect.c | 15 ++++++++----- libfreerdp/core/gateway/ncacn_http.c | 2 +- libfreerdp/core/gateway/ntlm.c | 8 +++---- libfreerdp/core/gateway/ntlm.h | 7 +++--- libfreerdp/core/gateway/rdg.c | 2 +- libfreerdp/core/input.c | 4 +++- libfreerdp/core/license.c | 10 +++++---- libfreerdp/core/proxy.c | 2 +- libfreerdp/core/rdp.c | 4 ++-- libfreerdp/core/surface.c | 7 +++++- libfreerdp/crypto/crypto.c | 8 ++++--- libfreerdp/crypto/per.c | 2 +- server/Windows/cli/wfreerdp.c | 8 +++---- server/Windows/wf_interface.c | 9 ++++---- server/Windows/wf_interface.h | 2 +- server/Windows/wf_peer.c | 2 +- server/Windows/wf_rdpsnd.c | 3 ++- server/shadow/Win/win_rdp.c | 4 ++-- 26 files changed, 88 insertions(+), 57 deletions(-) diff --git a/channels/rdpgfx/server/rdpgfx_main.c b/channels/rdpgfx/server/rdpgfx_main.c index 26a70ffaf..04b02b488 100644 --- a/channels/rdpgfx/server/rdpgfx_main.c +++ b/channels/rdpgfx/server/rdpgfx_main.c @@ -1135,7 +1135,7 @@ static UINT rdpgfx_recv_cache_import_offer_pdu(RdpgfxServerContext* context, wSt return ERROR_INVALID_DATA; } - if (Stream_GetRemainingLength(s) < (pdu.cacheEntriesCount * 12)) + if (Stream_GetRemainingLength(s) < (pdu.cacheEntriesCount * 12ULL)) { WLog_ERR(TAG, "not enough data!"); return ERROR_INVALID_DATA; diff --git a/channels/rdpsnd/server/rdpsnd_main.c b/channels/rdpsnd/server/rdpsnd_main.c index be0ca149f..8e72a76cf 100644 --- a/channels/rdpsnd/server/rdpsnd_main.c +++ b/channels/rdpsnd/server/rdpsnd_main.c @@ -159,7 +159,7 @@ static UINT rdpsnd_server_recv_formats(RdpsndServerContext* context, wStream* s) Stream_Seek_UINT8(s); /* bPad */ /* this check is only a guess as cbSize can influence the size of a format record */ - if (Stream_GetRemainingLength(s) < context->num_client_formats * 18) + if (Stream_GetRemainingLength(s) < context->num_client_formats * 18ULL) { WLog_ERR(TAG, "not enough data in stream!"); return ERROR_INVALID_DATA; diff --git a/client/Windows/wf_cliprdr.c b/client/Windows/wf_cliprdr.c index 2924af9ad..a51d1f71b 100644 --- a/client/Windows/wf_cliprdr.c +++ b/client/Windows/wf_cliprdr.c @@ -636,7 +636,7 @@ static HRESULT STDMETHODCALLTYPE CliprdrDataObject_GetData(IDataObject* This, FO } else if (instance->m_pFormatEtc[idx].cfFormat == RegisterClipboardFormat(CFSTR_FILECONTENTS)) { - if (pFormatEtc->lindex < instance->m_nStreams) + if ((pFormatEtc->lindex >= 0) && ((ULONG)pFormatEtc->lindex < instance->m_nStreams)) { pMedium->pstm = instance->m_pStream[pFormatEtc->lindex]; IDataObject_AddRef(instance->m_pStream[pFormatEtc->lindex]); @@ -749,7 +749,6 @@ static HRESULT STDMETHODCALLTYPE CliprdrDataObject_EnumDAdvise(IDataObject* This static CliprdrDataObject* CliprdrDataObject_New(FORMATETC* fmtetc, STGMEDIUM* stgmed, ULONG count, void* data) { - int i; CliprdrDataObject* instance; IDataObject* iDataObject; instance = (CliprdrDataObject*)calloc(1, sizeof(CliprdrDataObject)); @@ -783,6 +782,7 @@ static CliprdrDataObject* CliprdrDataObject_New(FORMATETC* fmtetc, STGMEDIUM* st if (count > 0) { + ULONG i; instance->m_pFormatEtc = (FORMATETC*)calloc(count, sizeof(FORMATETC)); if (!instance->m_pFormatEtc) diff --git a/client/Windows/wf_event.c b/client/Windows/wf_event.c index c35c2248c..55286542c 100644 --- a/client/Windows/wf_event.c +++ b/client/Windows/wf_event.c @@ -640,8 +640,8 @@ LRESULT CALLBACK wf_event_proc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam if (wParam == SYSCOMMAND_ID_SMARTSIZING) { HMENU hMenu = GetSystemMenu(wfc->hwnd, FALSE); - freerdp_set_param_bool(wfc->context.settings, FreeRDP_SmartSizing, - !wfc->context.settings->SmartSizing); + freerdp_settings_set_bool(wfc->context.settings, FreeRDP_SmartSizing, + !wfc->context.settings->SmartSizing); CheckMenuItem(hMenu, SYSCOMMAND_ID_SMARTSIZING, wfc->context.settings->SmartSizing ? MF_CHECKED : MF_UNCHECKED); } diff --git a/client/common/file.c b/client/common/file.c index 6645c7275..9b91ce2a9 100644 --- a/client/common/file.c +++ b/client/common/file.c @@ -1164,8 +1164,10 @@ BOOL freerdp_client_write_rdp_file(const rdpFile* file, const char* name, BOOL u return (status == 0) ? TRUE : FALSE; } +#if __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif static SSIZE_T freerdp_client_write_setting_to_buffer(char** buffer, size_t* bufferSize, const char* fmt, ...) { @@ -1208,7 +1210,9 @@ static SSIZE_T freerdp_client_write_setting_to_buffer(char** buffer, size_t* buf return len; } +#if __GNUC__ #pragma GCC diagnostic pop +#endif size_t freerdp_client_write_rdp_file_buffer(const rdpFile* file, char* buffer, size_t size) { diff --git a/libfreerdp/codec/test/TestFreeRDPCodecClear.c b/libfreerdp/codec/test/TestFreeRDPCodecClear.c index 813641d0e..2d31c7729 100644 --- a/libfreerdp/codec/test/TestFreeRDPCodecClear.c +++ b/libfreerdp/codec/test/TestFreeRDPCodecClear.c @@ -3,12 +3,16 @@ #include +#if __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-const-variable" +#endif /* [MS-RDPEGFX] 4.1.1.1 Example 1 */ static const BYTE PREPARE_CLEAR_EXAMPLE_1[] = "\x03\xc3\x11\x00"; static const BYTE TEST_CLEAR_EXAMPLE_1[] = "\x03\xc3\x11\x00"; +#if __GNUC__ #pragma GCC diagnostic pop +#endif /* [MS-RDPEGFX] 4.1.1.1 Example 2 */ static const BYTE TEST_CLEAR_EXAMPLE_2[] = diff --git a/libfreerdp/common/assistance.c b/libfreerdp/common/assistance.c index bb2c41e28..d955cfdfe 100644 --- a/libfreerdp/common/assistance.c +++ b/libfreerdp/common/assistance.c @@ -1123,7 +1123,11 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con BYTE* buffer; FILE* fp = NULL; size_t readSize; - INT64 fileSize; + union + { + INT64 i64; + size_t s; + } fileSize; if (!name) { @@ -1142,17 +1146,17 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con } _fseeki64(fp, 0, SEEK_END); - fileSize = _ftelli64(fp); + fileSize.i64 = _ftelli64(fp); _fseeki64(fp, 0, SEEK_SET); - if (fileSize < 1) + if (fileSize.i64 < 1) { WLog_ERR(TAG, "Failed to read ASSISTANCE file %s ", name); fclose(fp); return -1; } - buffer = (BYTE*)malloc(fileSize + 2); + buffer = (BYTE*)malloc(fileSize.s + 2); if (!buffer) { @@ -1160,12 +1164,12 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con return -1; } - readSize = fread(buffer, fileSize, 1, fp); + readSize = fread(buffer, fileSize.s, 1, fp); if (!readSize) { if (!ferror(fp)) - readSize = fileSize; + readSize = fileSize.s; } fclose(fp); @@ -1178,9 +1182,9 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con return -1; } - buffer[fileSize] = '\0'; - buffer[fileSize + 1] = '\0'; - status = freerdp_assistance_parse_file_buffer(file, (char*)buffer, fileSize, password); + buffer[fileSize.s] = '\0'; + buffer[fileSize.s + 1] = '\0'; + status = freerdp_assistance_parse_file_buffer(file, (char*)buffer, fileSize.s, password); free(buffer); return status; } diff --git a/libfreerdp/common/test/TestCommonAssistance.c b/libfreerdp/common/test/TestCommonAssistance.c index 22f37fce1..51d8390ce 100644 --- a/libfreerdp/common/test/TestCommonAssistance.c +++ b/libfreerdp/common/test/TestCommonAssistance.c @@ -21,12 +21,16 @@ static const char TEST_MSRC_INCIDENT_FILE_TYPE1[] = "L=\"0\" />" ""; +#if __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-const-variable" +#endif static const BYTE TEST_MSRC_INCIDENT_EXPERT_BLOB_TYPE1[32] = "\x3C\x9C\xAE\x0B\xCE\x7A\xB1\x5C\x8A\xAC\x01\xD6\x76\x04\x5E\xDF" "\x3F\xFA\xF0\x92\xE2\xDE\x36\x8A\x20\x17\xE6\x8A\x0D\xED\x7C\x90"; +#if __GNUC__ #pragma GCC diagnostic pop +#endif static const char TEST_MSRC_INCIDENT_PASSWORD_TYPE2[] = "48BJQ853X3B4"; diff --git a/libfreerdp/core/autodetect.c b/libfreerdp/core/autodetect.c index bc116bae2..02a789f9c 100644 --- a/libfreerdp/core/autodetect.c +++ b/libfreerdp/core/autodetect.c @@ -22,6 +22,7 @@ #endif #include +#include #include "autodetect.h" @@ -305,14 +306,15 @@ static BOOL autodetect_send_bandwidth_measure_results(rdpRdp* rdp, UINT16 respon return FALSE; WLog_VRB(AUTODETECT_TAG, - "sending Bandwidth Measure Results PDU -> timeDelta=%" PRIu32 ", byteCount=%" PRIu32 + "sending Bandwidth Measure Results PDU -> timeDelta=%" PRIu64 ", byteCount=%" PRIu32 "", timeDelta, rdp->autodetect->bandwidthMeasureByteCount); + Stream_Write_UINT8(s, 0x0E); /* headerLength (1 byte) */ Stream_Write_UINT8(s, TYPE_ID_AUTODETECT_RESPONSE); /* headerTypeId (1 byte) */ Stream_Write_UINT16(s, sequenceNumber); /* sequenceNumber (2 bytes) */ Stream_Write_UINT16(s, responseType); /* responseType (1 byte) */ - Stream_Write_UINT32(s, timeDelta); /* timeDelta (4 bytes) */ + Stream_Write_UINT32(s, (UINT32)MIN(timeDelta, UINT32_MAX)); /* timeDelta (4 bytes) */ Stream_Write_UINT32(s, rdp->autodetect->bandwidthMeasureByteCount); /* byteCount (4 bytes) */ IFCALLRET(rdp->autodetect->ClientBandwidthMeasureResult, success, rdp->context, rdp->autodetect); @@ -400,7 +402,8 @@ static BOOL autodetect_recv_rtt_measure_response(rdpRdp* rdp, wStream* s, return FALSE; WLog_VRB(AUTODETECT_TAG, "received RTT Measure Response PDU"); - rdp->autodetect->netCharAverageRTT = GetTickCount64() - rdp->autodetect->rttMeasureStartTime; + rdp->autodetect->netCharAverageRTT = + (UINT32)MIN(GetTickCount64() - rdp->autodetect->rttMeasureStartTime, UINT32_MAX); if (rdp->autodetect->netCharBaseRTT == 0 || rdp->autodetect->netCharBaseRTT > rdp->autodetect->netCharAverageRTT) @@ -514,8 +517,10 @@ static BOOL autodetect_recv_bandwidth_measure_results(rdpRdp* rdp, wStream* s, Stream_Read_UINT32(s, rdp->autodetect->bandwidthMeasureByteCount); /* byteCount (4 bytes) */ if (rdp->autodetect->bandwidthMeasureTimeDelta > 0) - rdp->autodetect->netCharBandwidth = rdp->autodetect->bandwidthMeasureByteCount * 8 / - rdp->autodetect->bandwidthMeasureTimeDelta; + rdp->autodetect->netCharBandwidth = + (UINT32)MIN(rdp->autodetect->bandwidthMeasureByteCount * 8ULL / + rdp->autodetect->bandwidthMeasureTimeDelta, + UINT32_MAX); else rdp->autodetect->netCharBandwidth = 0; diff --git a/libfreerdp/core/gateway/ncacn_http.c b/libfreerdp/core/gateway/ncacn_http.c index f288a0f3c..445401102 100644 --- a/libfreerdp/core/gateway/ncacn_http.c +++ b/libfreerdp/core/gateway/ncacn_http.c @@ -202,7 +202,7 @@ BOOL rpc_ncacn_http_ntlm_init(rdpContext* context, RpcChannel* channel) return TRUE; } - if (!ntlm_client_make_spn(ntlm, _T("HTTP"), settings->GatewayHostname)) + if (!ntlm_client_make_spn(ntlm, "HTTP", settings->GatewayHostname)) { return TRUE; } diff --git a/libfreerdp/core/gateway/ntlm.c b/libfreerdp/core/gateway/ntlm.c index 35637518c..78537cc2e 100644 --- a/libfreerdp/core/gateway/ntlm.c +++ b/libfreerdp/core/gateway/ntlm.c @@ -74,7 +74,7 @@ static ULONG cast_from_size_(size_t size, const char* fkt, const char* file, int #define cast_from_size(size) cast_from_size_(size, __FUNCTION__, __FILE__, __LINE__) -BOOL ntlm_client_init(rdpNtlm* ntlm, BOOL http, LPCTSTR user, LPCTSTR domain, LPCTSTR password, +BOOL ntlm_client_init(rdpNtlm* ntlm, BOOL http, LPCSTR user, LPCSTR domain, LPCSTR password, SecPkgContext_Bindings* Bindings) { SECURITY_STATUS status; @@ -135,15 +135,15 @@ BOOL ntlm_client_init(rdpNtlm* ntlm, BOOL http, LPCTSTR user, LPCTSTR domain, LP return TRUE; } -BOOL ntlm_client_make_spn(rdpNtlm* ntlm, LPCTSTR ServiceClass, LPCTSTR hostname) +BOOL ntlm_client_make_spn(rdpNtlm* ntlm, LPCSTR ServiceClass, LPCSTR hostname) { BOOL status = FALSE; DWORD SpnLength = 0; - LPTSTR hostnameX = NULL; #ifdef UNICODE + LPWSTR hostnameX = NULL; ConvertToUnicode(CP_UTF8, 0, hostname, -1, (LPWSTR*)&hostnameX, 0); #else - hostnameX = _strdup(hostname); + LPCSTR hostnameX = _strdup(hostname); #endif if (!hostnameX) diff --git a/libfreerdp/core/gateway/ntlm.h b/libfreerdp/core/gateway/ntlm.h index 0f7eaab26..c30b4e538 100644 --- a/libfreerdp/core/gateway/ntlm.h +++ b/libfreerdp/core/gateway/ntlm.h @@ -33,11 +33,10 @@ FREERDP_LOCAL void ntlm_free(rdpNtlm* ntlm); FREERDP_LOCAL BOOL ntlm_authenticate(rdpNtlm* ntlm, BOOL* pbContinueNeeded); -FREERDP_LOCAL BOOL ntlm_client_init(rdpNtlm* ntlm, BOOL confidentiality, LPCTSTR user, - LPCTSTR domain, LPCTSTR password, - SecPkgContext_Bindings* Bindings); +FREERDP_LOCAL BOOL ntlm_client_init(rdpNtlm* ntlm, BOOL confidentiality, LPCSTR user, LPCSTR domain, + LPCSTR password, SecPkgContext_Bindings* Bindings); -FREERDP_LOCAL BOOL ntlm_client_make_spn(rdpNtlm* ntlm, LPCTSTR ServiceClass, LPCTSTR hostname); +FREERDP_LOCAL BOOL ntlm_client_make_spn(rdpNtlm* ntlm, LPCSTR ServiceClass, LPCSTR hostname); FREERDP_LOCAL SSIZE_T ntlm_client_query_auth_size(rdpNtlm* ntlm); FREERDP_LOCAL SSIZE_T ntlm_client_get_context_max_size(rdpNtlm* ntlm); diff --git a/libfreerdp/core/gateway/rdg.c b/libfreerdp/core/gateway/rdg.c index cee35a394..e62b123fc 100644 --- a/libfreerdp/core/gateway/rdg.c +++ b/libfreerdp/core/gateway/rdg.c @@ -1633,7 +1633,7 @@ static BOOL rdg_ntlm_init(rdpRdg* rdg, rdpTls* tls) settings->GatewayPassword, tls->Bindings)) return FALSE; - if (!ntlm_client_make_spn(rdg->ntlm, _T("HTTP"), settings->GatewayHostname)) + if (!ntlm_client_make_spn(rdg->ntlm, "HTTP", settings->GatewayHostname)) return FALSE; if (!ntlm_authenticate(rdg->ntlm, &continueNeeded)) diff --git a/libfreerdp/core/input.c b/libfreerdp/core/input.c index 3f6336961..4518d6564 100644 --- a/libfreerdp/core/input.c +++ b/libfreerdp/core/input.c @@ -22,6 +22,7 @@ #endif #include +#include #include #include @@ -299,7 +300,8 @@ static BOOL input_send_fastpath_keyboard_event(rdpInput* input, UINT16 flags, UI if (!s) return FALSE; - Stream_Write_UINT8(s, code); /* keyCode (1 byte) */ + WINPR_ASSERT(code <= UINT8_MAX); + Stream_Write_UINT8(s, (UINT8)code); /* keyCode (1 byte) */ return fastpath_send_input_pdu(rdp->fastpath, s); } diff --git a/libfreerdp/core/license.c b/libfreerdp/core/license.c index dda76aaf9..f55c6cb55 100644 --- a/libfreerdp/core/license.c +++ b/libfreerdp/core/license.c @@ -268,7 +268,7 @@ static BYTE* loadCalFile(rdpSettings* settings, const char* hostname, size_t* da char *licenseStorePath = NULL, *calPath = NULL; char calFilename[MAX_PATH]; char hash[41]; - size_t length; + INT64 length; int status; FILE* fp; BYTE* ret = NULL; @@ -294,16 +294,18 @@ static BYTE* loadCalFile(rdpSettings* settings, const char* hostname, size_t* da _fseeki64(fp, 0, SEEK_END); length = _ftelli64(fp); _fseeki64(fp, 0, SEEK_SET); + if (length < 0) + goto error_malloc; - ret = (BYTE*)malloc(length); + ret = (BYTE*)malloc((size_t)length); if (!ret) goto error_malloc; - status = fread(ret, length, 1, fp); + status = fread(ret, (size_t)length, 1, fp); if (status <= 0) goto error_read; - *dataLen = length; + *dataLen = (size_t)length; fclose(fp); free(calPath); diff --git a/libfreerdp/core/proxy.c b/libfreerdp/core/proxy.c index c5f15d6a7..f1c5c2ee0 100644 --- a/libfreerdp/core/proxy.c +++ b/libfreerdp/core/proxy.c @@ -343,7 +343,7 @@ BOOL proxy_parse_uri(rdpSettings* settings, const char* uri_in) if ((errno != 0) || (val <= 0) || (val > UINT16_MAX)) return FALSE; - port = val; + port = (UINT16)val; } else { diff --git a/libfreerdp/core/rdp.c b/libfreerdp/core/rdp.c index b6aeafed7..ffc6ff02f 100644 --- a/libfreerdp/core/rdp.c +++ b/libfreerdp/core/rdp.c @@ -1213,7 +1213,7 @@ BOOL rdp_decrypt(rdpRdp* rdp, wStream* s, UINT16* pLength, UINT16 securityFlags) length -= 12; padLength = length - pad; - if ((length <= 0) || (padLength <= 0)) + if ((length <= 0) || (padLength <= 0) || (padLength > UINT16_MAX)) return FALSE; if (!security_fips_decrypt(Stream_Pointer(s), length, rdp)) @@ -1229,7 +1229,7 @@ BOOL rdp_decrypt(rdpRdp* rdp, wStream* s, UINT16* pLength, UINT16 securityFlags) } Stream_SetLength(s, Stream_Length(s) - pad); - *pLength = padLength; + *pLength = (UINT16)padLength; return TRUE; } diff --git a/libfreerdp/core/surface.c b/libfreerdp/core/surface.c index c406b954a..d584eb1ca 100644 --- a/libfreerdp/core/surface.c +++ b/libfreerdp/core/surface.c @@ -192,10 +192,15 @@ static BOOL update_write_surfcmd_bitmap_ex(wStream* s, const TS_BITMAP_DATA_EX* if (!Stream_EnsureRemainingCapacity(s, 12)) return FALSE; + if (bmp->codecID > UINT8_MAX) + { + WLog_ERR(TAG, "Invalid TS_BITMAP_DATA_EX::codecID=0x%04" PRIx16 "", bmp->codecID); + return FALSE; + } Stream_Write_UINT8(s, bmp->bpp); Stream_Write_UINT8(s, bmp->flags); Stream_Write_UINT8(s, 0); /* reserved1, reserved2 */ - Stream_Write_UINT8(s, bmp->codecID); + Stream_Write_UINT8(s, (UINT8)bmp->codecID); Stream_Write_UINT16(s, bmp->width); Stream_Write_UINT16(s, bmp->height); Stream_Write_UINT32(s, bmp->bitmapDataLength); diff --git a/libfreerdp/crypto/crypto.c b/libfreerdp/crypto/crypto.c index 67ebb6c02..a78e38423 100644 --- a/libfreerdp/crypto/crypto.c +++ b/libfreerdp/crypto/crypto.c @@ -320,13 +320,15 @@ static char* crypto_print_name(X509_NAME* name) if (X509_NAME_print_ex(outBIO, name, 0, XN_FLAG_ONELINE) > 0) { - unsigned long size = BIO_number_written(outBIO); - buffer = calloc(1, size + 1); + UINT64 size = BIO_number_written(outBIO); + if (size > INT_MAX) + return NULL; + buffer = calloc(1, (size_t)size + 1); if (!buffer) return NULL; - BIO_read(outBIO, buffer, size); + BIO_read(outBIO, buffer, (int)size); } BIO_free_all(outBIO); diff --git a/libfreerdp/crypto/per.c b/libfreerdp/crypto/per.c index fdb46ea47..282fe9c6b 100644 --- a/libfreerdp/crypto/per.c +++ b/libfreerdp/crypto/per.c @@ -75,7 +75,7 @@ BOOL per_write_length(wStream* s, UINT16 length) { if (!Stream_EnsureRemainingCapacity(s, 1)) return FALSE; - Stream_Write_UINT8(s, length); + Stream_Write_UINT8(s, (UINT8)length); } return TRUE; } diff --git a/server/Windows/cli/wfreerdp.c b/server/Windows/cli/wfreerdp.c index 0a6e85f4a..009ef71be 100644 --- a/server/Windows/cli/wfreerdp.c +++ b/server/Windows/cli/wfreerdp.c @@ -62,7 +62,6 @@ int main(int argc, char* argv[]) // first the args that will cause the program to terminate if (strcmp("--list-screens", argv[index]) == 0) { - _TCHAR name[128]; int width; int height; int bpp; @@ -72,7 +71,8 @@ int main(int argc, char* argv[]) for (i = 0;; i++) { - if (get_screen_info(i, name, &width, &height, &bpp) != 0) + _TCHAR name[128] = { 0 }; + if (get_screen_info(i, name, ARRAYSIZE(name), &width, &height, &bpp) != 0) { if ((width * height * bpp) == 0) continue; @@ -135,7 +135,6 @@ int main(int argc, char* argv[]) if (screen_selected == FALSE) { - _TCHAR name[128]; int width; int height; int bpp; @@ -146,7 +145,8 @@ int main(int argc, char* argv[]) for (i = 0;; i++) { - if (get_screen_info(i, name, &width, &height, &bpp) != 0) + _TCHAR name[128] = { 0 }; + if (get_screen_info(i, name, ARRAYSIZE(name), &width, &height, &bpp) != 0) { if ((width * height * bpp) == 0) continue; diff --git a/server/Windows/wf_interface.c b/server/Windows/wf_interface.c index cd801e914..7a2417ab8 100644 --- a/server/Windows/wf_interface.c +++ b/server/Windows/wf_interface.c @@ -43,13 +43,12 @@ #define SERVER_KEY "Software\\" FREERDP_VENDOR_STRING "\\" FREERDP_PRODUCT_STRING "\\Server" -cbCallback cbEvent; +static cbCallback cbEvent = NULL; -int get_screen_info(int id, _TCHAR* name, int* width, int* height, int* bpp) +int get_screen_info(int id, _TCHAR* name, size_t length, int* width, int* height, int* bpp) { - DISPLAY_DEVICE dd; + DISPLAY_DEVICE dd = { 0 }; - memset(&dd, 0, sizeof(DISPLAY_DEVICE)); dd.cb = sizeof(DISPLAY_DEVICE); if (EnumDisplayDevices(NULL, id, &dd, 0) != 0) @@ -57,7 +56,7 @@ int get_screen_info(int id, _TCHAR* name, int* width, int* height, int* bpp) HDC dc; if (name != NULL) - _stprintf(name, _T("%s (%s)"), dd.DeviceName, dd.DeviceString); + _stprintf_s(name, length, _T("%s (%s)"), dd.DeviceName, dd.DeviceString); dc = CreateDC(dd.DeviceName, NULL, NULL, NULL); *width = GetDeviceCaps(dc, HORZRES); diff --git a/server/Windows/wf_interface.h b/server/Windows/wf_interface.h index e62838dd1..5fcbad4ee 100644 --- a/server/Windows/wf_interface.h +++ b/server/Windows/wf_interface.h @@ -115,7 +115,7 @@ typedef struct wf_server wfServer; typedef void(__stdcall* cbCallback)(int, UINT32); -FREERDP_API int get_screen_info(int id, _TCHAR* name, int* w, int* h, int* b); +FREERDP_API int get_screen_info(int id, _TCHAR* name, size_t length, int* w, int* h, int* b); FREERDP_API void set_screen_id(int id); FREERDP_API BOOL wfreerdp_server_start(wfServer* server); diff --git a/server/Windows/wf_peer.c b/server/Windows/wf_peer.c index 5a5e96a7b..6726dd03f 100644 --- a/server/Windows/wf_peer.c +++ b/server/Windows/wf_peer.c @@ -97,7 +97,7 @@ static BOOL wf_peer_post_connect(freerdp_peer* client) wfi = context->info; settings = client->settings; - if ((get_screen_info(wfi->screenID, NULL, &wfi->servscreen_width, &wfi->servscreen_height, + if ((get_screen_info(wfi->screenID, NULL, 0, &wfi->servscreen_width, &wfi->servscreen_height, &wfi->bitsPerPixel) == 0) || (wfi->servscreen_width == 0) || (wfi->servscreen_height == 0) || (wfi->bitsPerPixel == 0)) { diff --git a/server/Windows/wf_rdpsnd.c b/server/Windows/wf_rdpsnd.c index 946deea5d..4f3767160 100644 --- a/server/Windows/wf_rdpsnd.c +++ b/server/Windows/wf_rdpsnd.c @@ -46,13 +46,14 @@ static void wf_peer_rdpsnd_activated(RdpsndServerContext* context) { wfInfo* wfi; - int i, j; + size_t i; wfi = wf_info_get_instance(); wfi->agreed_format = NULL; WLog_DBG(TAG, "Client supports the following %d formats:", context->num_client_formats); for (i = 0; i < context->num_client_formats; i++) { + size_t j; // TODO: improve the way we agree on a format for (j = 0; j < context->num_server_formats; j++) { diff --git a/server/shadow/Win/win_rdp.c b/server/shadow/Win/win_rdp.c index 807174faf..a1fc3acc3 100644 --- a/server/shadow/Win/win_rdp.c +++ b/server/shadow/Win/win_rdp.c @@ -104,8 +104,8 @@ static DWORD shw_verify_certificate(freerdp* instance, const char* common_name, return 1; } -static int shw_verify_x509_certificate(freerdp* instance, BYTE* data, int length, - const char* hostname, int port, DWORD flags) +static int shw_verify_x509_certificate(freerdp* instance, const BYTE* data, size_t length, + const char* hostname, UINT16 port, DWORD flags) { WLog_WARN(TAG, "Certificate checks not implemented, access granted to everyone!"); return 1;