diff --git a/client/common/file.c b/client/common/file.c
index 3ff727755..474b7f5f8 100755
--- a/client/common/file.c
+++ b/client/common/file.c
@@ -227,7 +227,10 @@ static BOOL freerdp_client_parse_rdp_file_integer(rdpFile* file, const char* nam
ivalue = strtol(value, NULL, 0);
if ((errno != 0) || (ivalue < INT32_MIN) || (ivalue > INT32_MAX))
+ {
+ WLog_ERR(TAG, "Failed to convert RDP file integer option %s [value=%s]", name, value);
return FALSE;
+ }
if (freerdp_client_rdp_file_set_integer(file, name, ivalue, index) < 0)
return FALSE;
@@ -395,7 +398,10 @@ static BOOL freerdp_client_parse_rdp_file_string(rdpFile* file, char* name, char
char* valueA = _strdup(value);
if (!valueA)
+ {
+ WLog_ERR(TAG, "Failed to convert RDP file string option %s [value=%s]", name, value);
return FALSE;
+ }
if (freerdp_client_rdp_file_set_string(file, name, valueA, index) == -1)
ret = FALSE;
@@ -431,7 +437,10 @@ BOOL freerdp_client_parse_rdp_file_buffer(rdpFile* file, const BYTE* buffer,
size = size / 2 - 1;
if (ConvertFromUnicode(CP_UTF8, 0, (LPCWSTR)(&buffer[2]), size, ©, 0, NULL, NULL) < 0)
+ {
+ WLog_ERR(TAG, "Failed to convert RDP file from UCS2 to UTF8");
return FALSE;
+ }
}
else
{
@@ -499,6 +508,7 @@ BOOL freerdp_client_parse_rdp_file_buffer(rdpFile* file, const BYTE* buffer,
else if (*type == 'b')
{
/* binary type */
+ WLog_ERR(TAG, "Unsupported RDP file binary option %s [value=%s]", name, value);
}
}
@@ -523,7 +533,10 @@ BOOL freerdp_client_parse_rdp_file(rdpFile* file, const char* name)
fp = fopen(name, "r");
if (!fp)
+ {
+ WLog_ERR(TAG, "Failed to open RDP file %s", name);
return FALSE;
+ }
_fseeki64(fp, 0, SEEK_END);
file_size = _ftelli64(fp);
@@ -531,6 +544,7 @@ BOOL freerdp_client_parse_rdp_file(rdpFile* file, const char* name)
if (file_size < 1)
{
+ WLog_ERR(TAG, "RDP file %s is empty", name);
fclose(fp);
return FALSE;
}
@@ -555,6 +569,7 @@ BOOL freerdp_client_parse_rdp_file(rdpFile* file, const char* name)
if (read_size < 1)
{
+ WLog_ERR(TAG, "Could not read from RDP file %s", name);
free(buffer);
return FALSE;
}
diff --git a/libfreerdp/common/assistance.c b/libfreerdp/common/assistance.c
index ce471683a..5e47ad73a 100644
--- a/libfreerdp/common/assistance.c
+++ b/libfreerdp/common/assistance.c
@@ -166,12 +166,14 @@ static BOOL reallocate(rdpAssistanceFile* file, const char* host, UINT32 port)
static BOOL append_address(rdpAssistanceFile* file, const char* host, const char* port)
{
unsigned long p;
-
errno = 0;
p = strtoul(port, NULL, 0);
if ((errno != 0) || (p == 0) || (p > UINT16_MAX))
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: ConnectionString2 invalid port value %s", port);
return FALSE;
+ }
return reallocate(file, host, (UINT16)p);
}
@@ -316,10 +318,16 @@ static BOOL freerdp_assistance_parse_connection_string2(rdpAssistanceFile* file)
str = file->ConnectionString2;
if (!strstr(str, ""))
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: ConnectionString2 missing field ");
return FALSE;
+ }
if (!strstr(str, ""))
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: ConnectionString2 missing field ");
return FALSE;
+ }
str = _strdup(file->ConnectionString2);
@@ -327,7 +335,10 @@ static BOOL freerdp_assistance_parse_connection_string2(rdpAssistanceFile* file)
goto out_fail;
if (!(tag = strstr(str, ") */
end = strstr(tag, "/>");
@@ -346,7 +357,10 @@ static BOOL freerdp_assistance_parse_connection_string2(rdpAssistanceFile* file)
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: ConnectionString2 invalid field KH=%s", q);
goto out_fail;
+ }
length = q - p;
free(file->RASpecificParams);
@@ -369,7 +383,10 @@ static BOOL freerdp_assistance_parse_connection_string2(rdpAssistanceFile* file)
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: ConnectionString2 invalid field ID=%s", q);
goto out_fail;
+ }
length = q - p;
free(file->RASessionId);
@@ -395,7 +412,10 @@ static BOOL freerdp_assistance_parse_connection_string2(rdpAssistanceFile* file)
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: ConnectionString2 invalid field ConnectionString2, 0, NULL, NULL);
if (status <= 0)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Conversion from UCS2 to UTF8 failed");
goto fail;
+ }
if (!freerdp_assistance_parse_connection_string2(file))
goto fail;
@@ -748,12 +780,18 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
p = strstr(p + sizeof("UPLOADINFO") - 1, "TYPE=\"");
if (!p)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Missing UPLOADINFO TYPE");
return -1;
+ }
p = strstr(buffer, "UPLOADDATA");
if (!p)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Missing UPLOADDATA");
return -1;
+ }
/* Parse USERNAME */
p = strstr(buffer, "USERNAME=\"");
@@ -764,7 +802,10 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Invalid USERNAME=%s", p);
return -1;
+ }
length = q - p;
file->Username = (char*) malloc(length + 1);
@@ -785,7 +826,10 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Invalid LHTICKET=%s", p);
return -1;
+ }
length = q - p;
file->LHTicket = (char*) malloc(length + 1);
@@ -806,7 +850,10 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Invalid RCTICKET=%s", p);
return -1;
+ }
length = q - p;
file->RCTicket = (char*) malloc(length + 1);
@@ -827,7 +874,10 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Invalid RCTICKETENCRYPTED=%s", p);
return -1;
+ }
length = q - p;
@@ -844,7 +894,10 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Invalid PassStub=%s", p);
return -1;
+ }
length = q - p;
file->PassStub = (char*) malloc(length + 1);
@@ -865,7 +918,10 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Invalid DtStart=%s", p);
return -1;
+ }
length = q - p;
r = (char*) malloc(length + 1);
@@ -881,7 +937,10 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
free(r);
if ((errno != 0) || (val > UINT32_MAX))
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Invalid DtStart value %s", r);
return -1;
+ }
file->DtStart = val;
}
@@ -896,7 +955,10 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Invalid DtLength=%s", p);
return -1;
+ }
length = q - p;
r = (char*) malloc(length + 1);
@@ -912,7 +974,10 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
free(r);
if ((errno != 0) || (val > UINT32_MAX))
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Invalid DtLength value %s", r);
return -1;
+ }
file->DtLength = val;
}
@@ -927,7 +992,10 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
q = strchr(p, '"');
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Invalid L=%s", p);
return -1;
+ }
length = q - p;
@@ -981,12 +1049,17 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
{
q = strstr(buffer, "");
if (!q)
+ {
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Missing tag");
return -1;
+ }
q += sizeof("") - 1;
length = q - p;
file->ConnectionString2 = (char*) malloc(length + 1);
-
+ if (!file->ConnectionString2)
+ return -1;
+
CopyMemory(file->ConnectionString2, p, length);
file->ConnectionString2[length] = '\0';
@@ -996,6 +1069,7 @@ int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* bu
return 1;
}
+ WLog_ERR(TAG, "Failed to parse ASSISTANCE file: Neither UPLOADINFO nor found");
return -1;
}
@@ -1008,7 +1082,10 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con
INT64 fileSize;
if (!name)
+ {
+ WLog_ERR(TAG, "ASSISTANCE file %s invalid name", name);
return -1;
+ }
free(file->filename);
free(file->password);
@@ -1017,7 +1094,10 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con
fp = fopen(name, "r");
if (!fp)
+ {
+ WLog_ERR(TAG, "Failed to open ASSISTANCE file %s ", name);
return -1;
+ }
_fseeki64(fp, 0, SEEK_END);
fileSize = _ftelli64(fp);
@@ -1025,6 +1105,7 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con
if (fileSize < 1)
{
+ WLog_ERR(TAG, "Failed to read ASSISTANCE file %s ", name);
fclose(fp);
return -1;
}
@@ -1049,6 +1130,7 @@ int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, con
if (readSize < 1)
{
+ WLog_ERR(TAG, "Failed to read ASSISTANCE file %s ", name);
free(buffer);
buffer = NULL;
return -1;
diff --git a/winpr/libwinpr/utils/cmdline.c b/winpr/libwinpr/utils/cmdline.c
index 3b1907dea..22b16ab24 100644
--- a/winpr/libwinpr/utils/cmdline.c
+++ b/winpr/libwinpr/utils/cmdline.c
@@ -25,6 +25,10 @@
#include
+#include "../log.h"
+
+#define TAG WINPR_TAG("commandline")
+
/**
* Command-line syntax: some basic concepts:
* https://pythonconquerstheuniverse.wordpress.com/2010/07/25/command-line-syntax-some-basic-concepts/
@@ -89,6 +93,7 @@ int CommandLineParseArgumentsA(int argc, LPSTR* argv, COMMAND_LINE_ARGUMENT_A* o
if (count < 0)
{
+ WLog_ERR(TAG, "Failed for index %d [%s]: PreFilter rule could not be applied", i, argv[i]);
status = COMMAND_LINE_ERROR;
return status;
}
@@ -132,7 +137,10 @@ int CommandLineParseArgumentsA(int argc, LPSTR* argv, COMMAND_LINE_ARGUMENT_A* o
else if (flags & COMMAND_LINE_SIGIL_NOT_ESCAPED)
{
if (notescaped)
+ {
+ WLog_ERR(TAG, "Failed at index %d [%s]: Unescaped sigil", i, argv[i]);
return COMMAND_LINE_ERROR;
+ }
sigil_length = 0;
escaped = FALSE;
@@ -140,6 +148,7 @@ int CommandLineParseArgumentsA(int argc, LPSTR* argv, COMMAND_LINE_ARGUMENT_A* o
}
else
{
+ WLog_ERR(TAG, "Failed at index %d [%s]: Invalid sigil", i, argv[i]);
return COMMAND_LINE_ERROR;
}
@@ -262,13 +271,19 @@ int CommandLineParseArgumentsA(int argc, LPSTR* argv, COMMAND_LINE_ARGUMENT_A* o
value = NULL;
}
else if (!value_present && argument)
+ {
+ WLog_ERR(TAG, "Failed at index %d [%s]: Argument required", i, argv[i]);
return COMMAND_LINE_ERROR;
+ }
}
if (!(flags & COMMAND_LINE_SEPARATOR_SPACE))
{
if (value && (options[j].Flags & COMMAND_LINE_VALUE_FLAG))
+ {
+ WLog_ERR(TAG, "Failed at index %d [%s]: Unexpected value", i, argv[i]);
return COMMAND_LINE_ERROR_UNEXPECTED_VALUE;
+ }
}
else
{
@@ -281,6 +296,7 @@ int CommandLineParseArgumentsA(int argc, LPSTR* argv, COMMAND_LINE_ARGUMENT_A* o
if (!value && (options[j].Flags & COMMAND_LINE_VALUE_REQUIRED))
{
+ WLog_ERR(TAG, "Failed at index %d [%s]: Missing value", i, argv[i]);
status = COMMAND_LINE_ERROR_MISSING_VALUE;
return status;
}
@@ -290,7 +306,10 @@ int CommandLineParseArgumentsA(int argc, LPSTR* argv, COMMAND_LINE_ARGUMENT_A* o
if (value)
{
if (options[j].Flags & (COMMAND_LINE_VALUE_FLAG | COMMAND_LINE_VALUE_BOOL))
+ {
+ WLog_ERR(TAG, "Failed at index %d [%s]: Unexpected value", i, argv[i]);
return COMMAND_LINE_ERROR_UNEXPECTED_VALUE;
+ }
options[j].Value = value;
options[j].Flags |= COMMAND_LINE_VALUE_PRESENT;
@@ -333,6 +352,7 @@ int CommandLineParseArgumentsA(int argc, LPSTR* argv, COMMAND_LINE_ARGUMENT_A* o
if (count < 0)
{
+ WLog_ERR(TAG, "Failed at index %d [%s]: PostFilter rule could not be applied", i, argv[i]);
status = COMMAND_LINE_ERROR;
return status;
}
@@ -349,7 +369,10 @@ int CommandLineParseArgumentsA(int argc, LPSTR* argv, COMMAND_LINE_ARGUMENT_A* o
}
if (!found && (flags & COMMAND_LINE_IGN_UNKNOWN_KEYWORD) == 0)
+ {
+ WLog_ERR(TAG, "Failed at index %d [%s]: Unexpected keyword", i, argv[i]);
return COMMAND_LINE_ERROR_NO_KEYWORD;
+ }
}
}