24
24
25
25
#include " app/src/log.h"
26
26
27
+ #define LOG_TAG " VerifyAndLoadAnalyticsLibrary: "
28
+
27
29
namespace firebase {
28
30
namespace analytics {
29
31
namespace internal {
@@ -49,28 +51,21 @@ static std::wstring GetExecutablePath() {
49
51
pgmptr_val, -1 , NULL , 0 );
50
52
if (wide_char_count == 0 ) { // Failure if count is 0
51
53
DWORD conversion_error = GetLastError ();
52
- LogError (
53
- " VerifyAndLoadAnalyticsLibrary: Invalid executable path. Error: %u" ,
54
- conversion_error);
54
+ LogError (LOG_TAG " Invalid executable path. Error: %u" , conversion_error);
55
55
return L" " ;
56
56
}
57
57
58
58
std::vector<wchar_t > wide_path_buffer (wide_char_count);
59
59
if (MultiByteToWideChar (CP_ACP, MB_ERR_INVALID_CHARS, pgmptr_val, -1 ,
60
60
wide_path_buffer.data (), wide_char_count) == 0 ) {
61
61
DWORD conversion_error = GetLastError ();
62
- LogError (
63
- " VerifyAndLoadAnalyticsLibrary: Invalid executable path. Error: %u" ,
64
- conversion_error);
62
+ LogError (LOG_TAG " Invalid executable path. Error: %u" , conversion_error);
65
63
return L" " ;
66
64
}
67
65
executable_path_str = wide_path_buffer.data ();
68
66
} else {
69
67
// Both _get_wpgmptr and _get_pgmptr failed or returned empty/null
70
- LogError (
71
- " VerifyAndLoadAnalyticsLibrary: Can't determine executable "
72
- " directory. Errors: %d, %d" ,
73
- err_w, err_c);
68
+ LogError (LOG_TAG " Can't determine executable directory. Errors: %d, %d" , err_w, err_c);
74
69
return L" " ;
75
70
}
76
71
}
@@ -85,10 +80,7 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
85
80
86
81
if (SetFilePointer (hFile, 0 , NULL , FILE_BEGIN) == INVALID_SET_FILE_POINTER) {
87
82
DWORD dwError = GetLastError ();
88
- LogError (
89
- " VerifyAndLoadAnalyticsLibrary: CalculateFileSha256.SetFilePointer "
90
- " failed. Error: %u" ,
91
- dwError);
83
+ LogError (LOG_TAG " CalculateFileSha256.SetFilePointer failed. Error: %u" , dwError);
92
84
return result_hash_value;
93
85
}
94
86
@@ -98,19 +90,13 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
98
90
if (!CryptAcquireContextW (&hProv, NULL , NULL , PROV_RSA_AES,
99
91
CRYPT_VERIFYCONTEXT)) {
100
92
DWORD dwError = GetLastError ();
101
- LogError (
102
- " VerifyAndLoadAnalyticsLibrary: "
103
- " CalculateFileSha256.CryptAcquireContextW failed. Error: %u" ,
104
- dwError);
93
+ LogError (LOG_TAG " CalculateFileSha256.CryptAcquireContextW failed. Error: %u" , dwError);
105
94
return result_hash_value;
106
95
}
107
96
108
97
if (!CryptCreateHash (hProv, CALG_SHA_256, 0 , 0 , &hHash)) {
109
98
DWORD dwError = GetLastError ();
110
- LogError (
111
- " VerifyAndLoadAnalyticsLibrary: CalculateFileSha256.CryptCreateHash "
112
- " failed. Error: %u" ,
113
- dwError);
99
+ LogError (LOG_TAG " CalculateFileSha256.CryptCreateHash failed. Error: %u" , dwError);
114
100
CryptReleaseContext (hProv, 0 );
115
101
return result_hash_value;
116
102
}
@@ -123,10 +109,7 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
123
109
bReadSuccessLoop = ReadFile (hFile, rgbFile, sizeof (rgbFile), &cbRead, NULL );
124
110
if (!bReadSuccessLoop) {
125
111
DWORD dwError = GetLastError ();
126
- LogError (
127
- " VerifyAndLoadAnalyticsLibrary: CalculateFileSha256.ReadFile failed. "
128
- " Error: %u" ,
129
- dwError);
112
+ LogError (LOG_TAG " CalculateFileSha256.ReadFile failed. Error: %u" , dwError);
130
113
CryptDestroyHash (hHash);
131
114
CryptReleaseContext (hProv, 0 );
132
115
return result_hash_value;
@@ -136,10 +119,7 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
136
119
}
137
120
if (!CryptHashData (hHash, rgbFile, cbRead, 0 )) {
138
121
DWORD dwError = GetLastError ();
139
- LogError (
140
- " VerifyAndLoadAnalyticsLibrary: CalculateFileSha256.CryptHashData "
141
- " failed. Error: %u" ,
142
- dwError);
122
+ LogError (LOG_TAG " CalculateFileSha256.CryptHashData failed. Error: %u" , dwError);
143
123
CryptDestroyHash (hHash);
144
124
CryptReleaseContext (hProv, 0 );
145
125
return result_hash_value;
@@ -152,7 +132,7 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
152
132
0 )) {
153
133
DWORD dwError = GetLastError ();
154
134
LogError (
155
- " VerifyAndLoadAnalyticsLibrary: CalculateFileSha256.CryptGetHashParam "
135
+ LOG_TAG " CalculateFileSha256.CryptGetHashParam "
156
136
" (HP_HASHSIZE) failed. Error: "
157
137
" %u" ,
158
138
dwError);
@@ -165,10 +145,7 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
165
145
if (!CryptGetHashParam (hHash, HP_HASHVAL, result_hash_value.data (),
166
146
&cbHashValue, 0 )) {
167
147
DWORD dwError = GetLastError ();
168
- LogError (
169
- " VerifyAndLoadAnalyticsLibrary: CalculateFileSha256.CryptGetHashParam "
170
- " (HP_HASHVAL) failed. Error: %u" ,
171
- dwError);
148
+ LogError (LOG_TAG " CalculateFileSha256.CryptGetHashParam (HP_HASHVAL) failed. Error: %u" , dwError);
172
149
result_hash_value.clear ();
173
150
CryptDestroyHash (hHash);
174
151
CryptReleaseContext (hProv, 0 );
@@ -185,7 +162,7 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
185
162
// filename e.g. "analytics_win.dll"
186
163
const unsigned char * expected_hash, size_t expected_hash_size) {
187
164
if (library_filename == nullptr || library_filename[0 ] == L' \0 ' ) {
188
- LogError (" VerifyAndLoadAnalyticsLibrary: Invalid arguments." );
165
+ LogError (LOG_TAG " Invalid arguments." );
189
166
return nullptr ;
190
167
}
191
168
if (expected_hash == nullptr || expected_hash_size == 0 ) {
@@ -194,32 +171,19 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
194
171
LOAD_LIBRARY_SEARCH_APPLICATION_DIR);
195
172
}
196
173
197
- std::wstring executable_path_str (_wpgmptr);
198
-
199
- size_t last_slash_pos = executable_path_str.find_last_of (L" \\ " );
200
- if (last_slash_pos == std::wstring::npos) {
201
- LogError (
202
- " VerifyAndLoadAnalyticsLibrary: Can't determine executable directory." );
203
- return nullptr ;
204
- }
205
-
206
174
std::wstring executable_path_str = GetExecutablePath ();
207
175
208
176
if (executable_path_str.empty ()) {
209
177
// GetExecutablePath() is expected to log specific errors.
210
178
// This log indicates the failure to proceed within this function.
211
- LogError (
212
- " VerifyAndLoadAnalyticsLibrary: Failed to determine executable path "
213
- " via GetExecutablePath(), cannot proceed." );
179
+ LogError (LOG_TAG " Can't determine executable path." );
214
180
return nullptr ;
215
181
}
216
182
217
183
size_t last_slash_pos = executable_path_str.find_last_of (L" \\ " );
218
184
if (last_slash_pos == std::wstring::npos) {
219
185
// Log message updated to avoid using %ls for executable_path_str
220
- LogError (
221
- " VerifyAndLoadAnalyticsLibrary: Could not determine executable "
222
- " directory from retrieved path (no backslash found)." );
186
+ LogError (LOG_TAG " Could not determine executable directory." );
223
187
return nullptr ;
224
188
}
225
189
@@ -236,10 +200,7 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
236
200
// logging an error. For other errors (e.g., access denied on an existing
237
201
// file), log them as it's an unexpected issue.
238
202
if (dwError != ERROR_FILE_NOT_FOUND && dwError != ERROR_PATH_NOT_FOUND) {
239
- LogError (
240
- " VerifyAndLoadAnalyticsLibrary: Failed to open Analytics DLL. Error: "
241
- " %u" ,
242
- dwError);
203
+ LogError (OG_TAG " Failed to open Analytics DLL. Error: %u" , dwError);
243
204
}
244
205
return nullptr ; // In all CreateFileW failure cases, return nullptr to fall
245
206
// back to stub mode.
@@ -253,10 +214,7 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
253
214
0xFFFFFFFF , &overlapped);
254
215
if (!bFileLocked) {
255
216
DWORD dwError = GetLastError ();
256
- LogError (
257
- " VerifyAndLoadAnalyticsLibrary: Failed to lock Analytics DLL. Error: "
258
- " %u" ,
259
- dwError);
217
+ LogError (LOG_TAG " Failed to lock Analytics DLL. Error: %u" , dwError);
260
218
CloseHandle (hFile);
261
219
return nullptr ;
262
220
}
@@ -266,17 +224,15 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
266
224
std::vector<BYTE> calculated_hash = CalculateFileSha256 (hFile);
267
225
268
226
if (calculated_hash.empty ()) {
269
- LogError (" VerifyAndLoadAnalyticsLibrary: Hash failed for Analytics DLL." );
227
+ LogError (LOG_TAG " Hash failed for Analytics DLL." );
270
228
} else {
271
229
if (calculated_hash.size () != expected_hash_size) {
272
230
LogError (
273
- " VerifyAndLoadAnalyticsLibrary: Hash size mismatch for Analytics "
274
- " DLL. Expected: %zu, Calculated: %zu." ,
275
- expected_hash_size, calculated_hash.size ());
231
+ LOG_TAG " Hash size mismatch for Analytics DLL. Expected: %zu, Calculated: %zu." , expected_hash_size, calculated_hash.size ());
276
232
} else if (memcmp (calculated_hash.data (), expected_hash,
277
233
expected_hash_size) != 0 ) {
278
234
LogError (
279
- " VerifyAndLoadAnalyticsLibrary: Hash mismatch for Analytics DLL." );
235
+ LOG_TAG " Hash mismatch for Analytics DLL." );
280
236
} else {
281
237
// Load the library. LOAD_LIBRARY_SEARCH_APPLICATION_DIR is a security
282
238
// measure to help ensure that the DLL is loaded from the application's
@@ -288,31 +244,22 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
288
244
LOAD_LIBRARY_SEARCH_APPLICATION_DIR);
289
245
if (hModule == NULL ) {
290
246
DWORD dwError = GetLastError ();
291
- LogError (
292
- " VerifyAndLoadAnalyticsLibrary: Library load failed for Analytics "
293
- " DLL. Error: %u" ,
294
- dwError);
247
+ LogError (LOG_TAG " Library load failed for Analytics DLL. Error: %u" , dwError);
295
248
}
296
249
}
297
250
}
298
251
299
252
if (bFileLocked) {
300
253
if (!UnlockFileEx (hFile, 0 , 0xFFFFFFFF , 0xFFFFFFFF , &overlapped)) {
301
254
DWORD dwError = GetLastError ();
302
- LogError (
303
- " VerifyAndLoadAnalyticsLibrary: Failed to unlock Analytics DLL. "
304
- " Error: %u" ,
305
- dwError);
255
+ LogError (LOG_TAG " Failed to unlock Analytics DLL. Error: %u" , dwError);
306
256
}
307
257
}
308
258
309
259
if (hFile != INVALID_HANDLE_VALUE) {
310
260
if (!CloseHandle (hFile)) {
311
261
DWORD dwError = GetLastError ();
312
- LogError (
313
- " VerifyAndLoadAnalyticsLibrary: Failed to close Analytics DLL. "
314
- " Error: %u" ,
315
- dwError);
262
+ LogError (LOG_TAG " Failed to close Analytics DLL. Error: %u" , dwError);
316
263
}
317
264
}
318
265
return hModule;
0 commit comments