diff --git a/channels/audin/client/audin_main.c b/channels/audin/client/audin_main.c index 737c82844..901b29c05 100644 --- a/channels/audin/client/audin_main.c +++ b/channels/audin/client/audin_main.c @@ -721,10 +721,8 @@ BOOL audin_process_addin_args(AUDIN_PLUGIN* audin, ADDIN_ARGV* args) COMMAND_LINE_ARGUMENT_A* arg; UINT error; - if (args->argc == 1) - { + if (!args || args->argc == 1) return TRUE; - } flags = COMMAND_LINE_SIGIL_NONE | COMMAND_LINE_SEPARATOR_COLON | COMMAND_LINE_IGN_UNKNOWN_KEYWORD; diff --git a/libfreerdp/common/assistance.c b/libfreerdp/common/assistance.c index 9f231be2d..c18920771 100644 --- a/libfreerdp/common/assistance.c +++ b/libfreerdp/common/assistance.c @@ -250,7 +250,7 @@ int freerdp_assistance_parse_connection_string1(rdpAssistanceFile* file) int count; int length; char* tokens[8]; - int ret; + int ret = -1; /** * ,,,, @@ -272,7 +272,7 @@ int freerdp_assistance_parse_connection_string1(rdpAssistanceFile* file) } if (count != 8) - return -1; + goto error; count = 0; tokens[count++] = str; @@ -287,32 +287,33 @@ int freerdp_assistance_parse_connection_string1(rdpAssistanceFile* file) } if (strcmp(tokens[0], "65538") != 0) - return -1; + goto error; if (strcmp(tokens[1], "1") != 0) - return -1; + goto error; if (strcmp(tokens[3], "*") != 0) - return -1; + goto error; if (strcmp(tokens[5], "*") != 0) - return -1; + goto error; if (strcmp(tokens[6], "*") != 0) - return -1; + goto error; file->RASessionId = _strdup(tokens[4]); if (!file->RASessionId) - return -1; + goto error; file->RASpecificParams = _strdup(tokens[7]); if (!file->RASpecificParams) - return -1; + goto error; ret = freerdp_assistance_parse_address_list(file, tokens[2]); +error: free(str); if (ret != 1) diff --git a/libfreerdp/core/gateway/http.c b/libfreerdp/core/gateway/http.c index a3d5da350..c12db2eb1 100644 --- a/libfreerdp/core/gateway/http.c +++ b/libfreerdp/core/gateway/http.c @@ -504,7 +504,11 @@ BOOL http_response_parse_header_field(HttpResponse* response, char* name, char* authValue = _strdup(separator + 1); if (!authScheme || !authValue) + { + free(authScheme); + free(authValue); return FALSE; + } *separator = ' '; } diff --git a/libfreerdp/core/gateway/ntlm.c b/libfreerdp/core/gateway/ntlm.c index ce6925bbd..c5db8132d 100644 --- a/libfreerdp/core/gateway/ntlm.c +++ b/libfreerdp/core/gateway/ntlm.c @@ -103,6 +103,7 @@ BOOL ntlm_client_init(rdpNtlm* ntlm, BOOL http, char* user, char* domain, char* BOOL ntlm_client_make_spn(rdpNtlm* ntlm, LPCTSTR ServiceClass, char* hostname) { + BOOL status = FALSE; DWORD SpnLength = 0; LPTSTR hostnameX = NULL; @@ -128,19 +129,22 @@ BOOL ntlm_client_make_spn(rdpNtlm* ntlm, LPCTSTR ServiceClass, char* hostname) } if (DsMakeSpn(ServiceClass, hostnameX, NULL, 0, NULL, &SpnLength, NULL) != ERROR_BUFFER_OVERFLOW) - return FALSE; + goto error; ntlm->ServicePrincipalName = (LPTSTR) malloc(SpnLength * sizeof(TCHAR)); if (!ntlm->ServicePrincipalName) - return FALSE; + goto error; if (DsMakeSpn(ServiceClass, hostnameX, NULL, 0, NULL, &SpnLength, ntlm->ServicePrincipalName) != ERROR_SUCCESS) - return FALSE; + goto error; + status = TRUE; + +error: free(hostnameX); - return TRUE; + return status; } /** diff --git a/libfreerdp/core/nla.c b/libfreerdp/core/nla.c index 457326ddd..9148703de 100644 --- a/libfreerdp/core/nla.c +++ b/libfreerdp/core/nla.c @@ -1673,7 +1673,11 @@ LPTSTR nla_make_spn(const char* ServiceClass, const char* hostname) ServicePrincipalName = (LPTSTR) malloc(SpnLength * sizeof(TCHAR)); if (!ServicePrincipalName) + { + free(ServiceClassX); + free(hostnameX); return NULL; + } status = DsMakeSpn(ServiceClassX, hostnameX, NULL, 0, NULL, &SpnLength, ServicePrincipalName); diff --git a/server/shadow/X11/x11_shadow.c b/server/shadow/X11/x11_shadow.c index 7abb218ec..5efee180a 100644 --- a/server/shadow/X11/x11_shadow.c +++ b/server/shadow/X11/x11_shadow.c @@ -165,7 +165,10 @@ int x11_shadow_pam_authenticate(x11ShadowSubsystem* subsystem, rdpShadowClient* return PAM_CONV_ERR; if (x11_shadow_pam_get_service_name(info) < 0) + { + free(info); return -1; + } info->appdata.user = user; info->appdata.domain = domain; diff --git a/server/shadow/shadow_server.c b/server/shadow/shadow_server.c index a2689c370..4e979a02a 100644 --- a/server/shadow/shadow_server.c +++ b/server/shadow/shadow_server.c @@ -204,7 +204,10 @@ int shadow_server_parse_command_line(rdpShadowServer* server, int argc, char** a p = strchr(p + 1, ','); if (!p) + { + free(str); return -1; + } *p++ = '\0'; tok[1] = p; @@ -212,7 +215,10 @@ int shadow_server_parse_command_line(rdpShadowServer* server, int argc, char** a p = strchr(p + 1, ','); if (!p) + { + free(str); return -1; + } *p++ = '\0'; tok[2] = p; @@ -220,7 +226,10 @@ int shadow_server_parse_command_line(rdpShadowServer* server, int argc, char** a p = strchr(p + 1, ','); if (!p) + { + free(str); return -1; + } *p++ = '\0'; tok[3] = p; @@ -229,6 +238,7 @@ int shadow_server_parse_command_line(rdpShadowServer* server, int argc, char** a y = atoi(tok[1]); w = atoi(tok[2]); h = atoi(tok[3]); + free(str); if ((x < 0) || (y < 0) || (w < 1) || (h < 1)) return -1; diff --git a/winpr/libwinpr/smartcard/smartcard_pcsc.c b/winpr/libwinpr/smartcard/smartcard_pcsc.c index 34cfc88a8..36c2933d0 100644 --- a/winpr/libwinpr/smartcard/smartcard_pcsc.c +++ b/winpr/libwinpr/smartcard/smartcard_pcsc.c @@ -2427,7 +2427,10 @@ WINSCARDAPI LONG WINAPI PCSC_SCardGetAttrib_FriendlyName(SCARDHANDLE hCard, DWOR friendlyNameA = _strdup(nameWinSCard); if (!friendlyNameA) + { + free(namePCSC); return SCARD_E_NO_MEMORY; + } } else { @@ -2442,7 +2445,10 @@ WINSCARDAPI LONG WINAPI PCSC_SCardGetAttrib_FriendlyName(SCARDHANDLE hCard, DWOR free(friendlyNameA); if (!friendlyNameW) + { + free(namePCSC); return SCARD_E_NO_MEMORY; + } if (cbAttrLen == SCARD_AUTOALLOCATE) { @@ -2455,6 +2461,7 @@ WINSCARDAPI LONG WINAPI PCSC_SCardGetAttrib_FriendlyName(SCARDHANDLE hCard, DWOR if ((length * 2) > cbAttrLen) { free(friendlyNameW); + free(namePCSC); return SCARD_E_INSUFFICIENT_BUFFER; } else @@ -2478,6 +2485,7 @@ WINSCARDAPI LONG WINAPI PCSC_SCardGetAttrib_FriendlyName(SCARDHANDLE hCard, DWOR if ((length + 1) > cbAttrLen) { free(friendlyNameA); + free(namePCSC); return SCARD_E_INSUFFICIENT_BUFFER; } else diff --git a/winpr/libwinpr/timezone/timezone.c b/winpr/libwinpr/timezone/timezone.c index 520f38097..fd614ee19 100644 --- a/winpr/libwinpr/timezone/timezone.c +++ b/winpr/libwinpr/timezone/timezone.c @@ -1974,15 +1974,14 @@ DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation) * 2 ... TIME_ZONE_ID_DAYLIGHT */ return local_time->tm_isdst ? 2 : 1; } - else - { - /* could not detect timezone, use computed bias from tm_gmtoff */ - WLog_DBG(TAG, "tz not found, using computed bias %d.", tz->Bias); + + /* could not detect timezone, use computed bias from tm_gmtoff */ + WLog_DBG(TAG, "tz not found, using computed bias %d.", tz->Bias); out_error: - memcpy(tz->StandardName, L"Client Local Time", sizeof(tz->StandardName)); - memcpy(tz->DaylightName, L"Client Local Time", sizeof(tz->DaylightName)); - return 0; /* TIME_ZONE_ID_UNKNOWN */ - } + free(dtz); + memcpy(tz->StandardName, L"Client Local Time", sizeof(tz->StandardName)); + memcpy(tz->DaylightName, L"Client Local Time", sizeof(tz->DaylightName)); + return 0; /* TIME_ZONE_ID_UNKNOWN */ } BOOL SetTimeZoneInformation(const TIME_ZONE_INFORMATION* lpTimeZoneInformation) diff --git a/winpr/libwinpr/utils/ntlm.c b/winpr/libwinpr/utils/ntlm.c index be1deaedc..fa4493f54 100644 --- a/winpr/libwinpr/utils/ntlm.c +++ b/winpr/libwinpr/utils/ntlm.c @@ -34,20 +34,24 @@ BYTE* NTOWFv1W(LPWSTR Password, UINT32 PasswordLength, BYTE* NtHash) { + BOOL allocate = !NtHash; WINPR_MD4_CTX md4; if (!Password) return NULL; - if (!NtHash && !(NtHash = malloc(16))) - return NULL; - if (!winpr_MD4_Init(&md4)) return NULL; if (!winpr_MD4_Update(&md4, (BYTE*) Password, (size_t) PasswordLength)) return NULL; - if (!winpr_MD4_Final(&md4, NtHash, WINPR_MD4_DIGEST_LENGTH)) + if (!NtHash && !(NtHash = malloc(WINPR_MD4_DIGEST_LENGTH))) return NULL; + if (!winpr_MD4_Final(&md4, NtHash, WINPR_MD4_DIGEST_LENGTH)) + { + if (allocate) + free(NtHash); + return NULL; + } return NtHash; }