diff --git a/libfreerdp/common/assistance.c b/libfreerdp/common/assistance.c index 212e8467b..5161411e6 100644 --- a/libfreerdp/common/assistance.c +++ b/libfreerdp/common/assistance.c @@ -1225,9 +1225,8 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* cb int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, const char* password) { - int status = 0; + int status = -1; BYTE* buffer = nullptr; - FILE* fp = nullptr; size_t readSize = 0; union { @@ -1238,7 +1237,7 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con if (!update_name(file, name)) return -1; - fp = winpr_fopen(name, "r"); + FILE* fp = winpr_fopen(name, "r"); if (!fp) { @@ -1246,24 +1245,22 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con return -1; } - (void)_fseeki64(fp, 0, SEEK_END); + if (_fseeki64(fp, 0, SEEK_END) < 0) + goto fail; fileSize.i64 = _ftelli64(fp); - (void)_fseeki64(fp, 0, SEEK_SET); + if (_fseeki64(fp, 0, SEEK_SET) < 0) + goto fail; if (fileSize.i64 < 1) { WLog_ERR(TAG, "Failed to read ASSISTANCE file %s ", name); - (void)fclose(fp); - return -1; + goto fail; } buffer = (BYTE*)malloc(fileSize.s + 2); if (!buffer) - { - (void)fclose(fp); - return -1; - } + goto fail; readSize = fread(buffer, fileSize.s, 1, fp); @@ -1273,19 +1270,18 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con readSize = fileSize.s; } - (void)fclose(fp); - if (readSize < 1) { WLog_ERR(TAG, "Failed to read ASSISTANCE file %s ", name); - free(buffer); - buffer = nullptr; - return -1; + goto fail; } buffer[fileSize.s] = '\0'; buffer[fileSize.s + 1] = '\0'; status = freerdp_assistance_parse_file_buffer(file, (char*)buffer, fileSize.s, password); + +fail: + (void)fclose(fp); free(buffer); return status; } diff --git a/libfreerdp/core/multitransport.c b/libfreerdp/core/multitransport.c index df12ea45d..f4fbfea25 100644 --- a/libfreerdp/core/multitransport.c +++ b/libfreerdp/core/multitransport.c @@ -85,7 +85,8 @@ state_run_t multitransport_recv_request(rdpMultitransport* multi, wStream* s) WLog_WARN(TAG, "reserved is %" PRIu16 " instead of 0, skipping %" PRIuz "bytes of unknown data", reserved, Stream_GetRemainingLength(s)); - (void)Stream_SafeSeek(s, Stream_GetRemainingLength(s)); + if (!Stream_SafeSeek(s, Stream_GetRemainingLength(s))) + return STATE_RUN_FAILED; } WINPR_ASSERT(multi->MtRequest); diff --git a/libfreerdp/core/smartcardlogon.c b/libfreerdp/core/smartcardlogon.c index 468bb32ee..23ee66c0e 100644 --- a/libfreerdp/core/smartcardlogon.c +++ b/libfreerdp/core/smartcardlogon.c @@ -58,15 +58,16 @@ static void delete_file(char* path) int rs = _fseeki64(fp, 0, SEEK_END); if (rs == 0) size = _ftelli64(fp); - (void)_fseeki64(fp, 0, SEEK_SET); - - for (INT64 x = 0; x < size; x += sizeof(buffer)) + if (_fseeki64(fp, 0, SEEK_SET) == 0) { - const size_t dnmemb = (size_t)(size - x); - const size_t nmemb = MIN(sizeof(buffer), dnmemb); - const size_t count = fwrite(buffer, nmemb, 1, fp); - if (count != 1) - break; + for (INT64 x = 0; x < size; x += sizeof(buffer)) + { + const size_t dnmemb = (size_t)(size - x); + const size_t nmemb = MIN(sizeof(buffer), dnmemb); + const size_t count = fwrite(buffer, nmemb, 1, fp); + if (count != 1) + break; + } } (void)fclose(fp); diff --git a/libfreerdp/core/streamdump.c b/libfreerdp/core/streamdump.c index 01829c69e..1b2176cf2 100644 --- a/libfreerdp/core/streamdump.c +++ b/libfreerdp/core/streamdump.c @@ -79,7 +79,10 @@ static return FALSE; if (pOffset) - (void)_fseeki64(fp, WINPR_ASSERTING_INT_CAST(int64_t, *pOffset), SEEK_SET); + { + if (_fseeki64(fp, WINPR_ASSERTING_INT_CAST(int64_t, *pOffset), SEEK_SET) < 0) + goto fail; + } r = fread(&ts, 1, sizeof(ts), fp); if (r != sizeof(ts))