Skip to content

Commit d089c66

Browse files
authored
Merge pull request #354 from lplewa/fopen
remove fopen_s and fix error in logger
2 parents f0a5a7a + d8fefbf commit d089c66

File tree

2 files changed

+29
-31
lines changed

2 files changed

+29
-31
lines changed

src/utils/utils_log.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -156,26 +156,23 @@ void util_log_init(void) {
156156
len = strlen(arg);
157157
}
158158

159-
if (len <= MAX_FILE_PATH) {
160-
memcpy(file, arg, len);
161-
file[len] = '\0';
162-
#ifdef _WIN32
163-
if (fopen_s(&loggerConfig.output, file, "w")) {
164-
loggerConfig.output = NULL;
165-
}
166-
#else
167-
loggerConfig.output = fopen(file, "w");
168-
#endif
159+
if (len > MAX_FILE_PATH) {
160+
loggerConfig.output = stderr;
161+
LOG_ERR("Cannot open output file - path too long");
162+
loggerConfig.output = NULL;
163+
return;
169164
}
165+
166+
memcpy(file, arg, len);
167+
file[len] = '\0';
168+
loggerConfig.output = fopen(file, "w");
170169
if (!loggerConfig.output) {
171170
loggerConfig.output = stderr;
172171
LOG_ERR("Cannot open output file %s - logging disabled", file);
173172
loggerConfig.output = NULL;
174173
return;
175174
}
176-
}
177-
178-
else {
175+
} else {
179176
loggerConfig.output = stderr;
180177
LOG_ERR("Logging output not set - logging disabled");
181178
loggerConfig.output = NULL;

test/utils/utils_log.cpp

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,6 @@ FILE *mock_fopen(const char *filename, const char *mode) {
1717
return MOCK_FILE_PTR;
1818
}
1919

20-
int mock_fopen_s(FILE **f, const char *filename, const char *mode) {
21-
*f = mock_fopen(filename, mode);
22-
23-
return 0;
24-
}
25-
2620
std::string expected_message = "";
2721
FILE *expected_stream;
2822
int expect_fput_count = 0;
@@ -50,7 +44,6 @@ extern "C" {
5044

5145
const char *env_variable = "";
5246
#define fopen(A, B) mock_fopen(A, B)
53-
#define fopen_s(A, B, C) mock_fopen_s(A, B, C)
5447
#define fputs(A, B) mock_fputs(A, B)
5548
#define fflush(A) mock_fflush(A)
5649
#define util_env_var(A, B, C) mock_util_env_var(A, B, C)
@@ -83,6 +76,7 @@ void helper_checkConfig(util_log_config_t *expected, util_log_config_t *is) {
8376
}
8477

8578
TEST_F(test, parseEnv_errors) {
79+
expected_message = "";
8680
loggerConfig = {0, 0, LOG_ERROR, LOG_ERROR, NULL};
8781
expect_fput_count = 0;
8882
expected_stream = stderr;
@@ -98,6 +92,9 @@ TEST_F(test, parseEnv_errors) {
9892
helper_checkConfig(&b, &loggerConfig);
9993
helper_log_init("_level:debug");
10094
helper_checkConfig(&b, &loggerConfig);
95+
expect_fput_count = 1;
96+
expected_message = "[ERROR UMF] Cannot open output file - path too long\n";
97+
helper_log_init(("output:file," + std::string(300, 'x')).c_str());
10198
}
10299

103100
TEST_F(test, parseEnv) {
@@ -141,17 +138,20 @@ TEST_F(test, parseEnv) {
141138
output.first + ";" +
142139
timestamp.first + ";" + pid.first;
143140
b = loggerConfig = {0, 0, LOG_ERROR, LOG_ERROR, NULL};
141+
expect_fput_count = 0;
142+
expect_fopen_count = 0;
143+
expected_stream = stderr;
144+
expected_message = "";
145+
expected_filename = "";
146+
auto n = output.first.find(',');
147+
if (n != std::string::npos) {
148+
expected_filename = output.first.substr(n + 1);
149+
}
150+
144151
if (output.second != NULL) {
145152
b.output = output.second;
146153
if (output.second == MOCK_FILE_PTR) {
147154
expect_fopen_count = 1;
148-
} else {
149-
expect_fopen_count = 0;
150-
}
151-
auto n = output.first.find(',');
152-
if (n != std::string::npos) {
153-
expected_filename =
154-
output.first.substr(n + 1).c_str();
155155
}
156156
expected_stream = output.second;
157157
b.timestamp = timestamp.second;
@@ -161,13 +161,14 @@ TEST_F(test, parseEnv) {
161161
b.level = (util_log_level_t)logLevel.second;
162162
if (logLevel.second <= LOG_INFO) {
163163
expect_fput_count = 1;
164-
} else {
165-
expect_fput_count = 0;
166164
}
167165
} else {
168166
expect_fput_count = 1;
169-
expect_fopen_count = 0;
170-
expected_stream = stderr;
167+
if (expected_filename.size() > MAX_FILE_PATH) {
168+
expected_message =
169+
"[ERROR UMF] Cannot open output file - "
170+
"path too long\n";
171+
}
171172
}
172173
helper_log_init(envVar.c_str());
173174
helper_checkConfig(&b, &loggerConfig);

0 commit comments

Comments
 (0)