2424
2525#include " app/src/log.h"
2626
27+ #define LOG_TAG " VerifyAndLoadAnalyticsLibrary: "
28+
2729namespace firebase {
2830namespace analytics {
2931namespace internal {
@@ -49,28 +51,21 @@ static std::wstring GetExecutablePath() {
4951 pgmptr_val, -1 , NULL , 0 );
5052 if (wide_char_count == 0 ) { // Failure if count is 0
5153 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);
5555 return L" " ;
5656 }
5757
5858 std::vector<wchar_t > wide_path_buffer (wide_char_count);
5959 if (MultiByteToWideChar (CP_ACP, MB_ERR_INVALID_CHARS, pgmptr_val, -1 ,
6060 wide_path_buffer.data (), wide_char_count) == 0 ) {
6161 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);
6563 return L" " ;
6664 }
6765 executable_path_str = wide_path_buffer.data ();
6866 } else {
6967 // 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);
7469 return L" " ;
7570 }
7671 }
@@ -85,10 +80,7 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
8580
8681 if (SetFilePointer (hFile, 0 , NULL , FILE_BEGIN) == INVALID_SET_FILE_POINTER) {
8782 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);
9284 return result_hash_value;
9385 }
9486
@@ -98,19 +90,13 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
9890 if (!CryptAcquireContextW (&hProv, NULL , NULL , PROV_RSA_AES,
9991 CRYPT_VERIFYCONTEXT)) {
10092 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);
10594 return result_hash_value;
10695 }
10796
10897 if (!CryptCreateHash (hProv, CALG_SHA_256, 0 , 0 , &hHash)) {
10998 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);
114100 CryptReleaseContext (hProv, 0 );
115101 return result_hash_value;
116102 }
@@ -123,10 +109,7 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
123109 bReadSuccessLoop = ReadFile (hFile, rgbFile, sizeof (rgbFile), &cbRead, NULL );
124110 if (!bReadSuccessLoop) {
125111 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);
130113 CryptDestroyHash (hHash);
131114 CryptReleaseContext (hProv, 0 );
132115 return result_hash_value;
@@ -136,10 +119,7 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
136119 }
137120 if (!CryptHashData (hHash, rgbFile, cbRead, 0 )) {
138121 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);
143123 CryptDestroyHash (hHash);
144124 CryptReleaseContext (hProv, 0 );
145125 return result_hash_value;
@@ -152,7 +132,7 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
152132 0 )) {
153133 DWORD dwError = GetLastError ();
154134 LogError (
155- " VerifyAndLoadAnalyticsLibrary: CalculateFileSha256.CryptGetHashParam "
135+ LOG_TAG " CalculateFileSha256.CryptGetHashParam "
156136 " (HP_HASHSIZE) failed. Error: "
157137 " %u" ,
158138 dwError);
@@ -165,10 +145,7 @@ static std::vector<BYTE> CalculateFileSha256(HANDLE hFile) {
165145 if (!CryptGetHashParam (hHash, HP_HASHVAL, result_hash_value.data (),
166146 &cbHashValue, 0 )) {
167147 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);
172149 result_hash_value.clear ();
173150 CryptDestroyHash (hHash);
174151 CryptReleaseContext (hProv, 0 );
@@ -185,7 +162,7 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
185162 // filename e.g. "analytics_win.dll"
186163 const unsigned char * expected_hash, size_t expected_hash_size) {
187164 if (library_filename == nullptr || library_filename[0 ] == L' \0 ' ) {
188- LogError (" VerifyAndLoadAnalyticsLibrary: Invalid arguments." );
165+ LogError (LOG_TAG " Invalid arguments." );
189166 return nullptr ;
190167 }
191168 if (expected_hash == nullptr || expected_hash_size == 0 ) {
@@ -194,32 +171,19 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
194171 LOAD_LIBRARY_SEARCH_APPLICATION_DIR);
195172 }
196173
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-
206174 std::wstring executable_path_str = GetExecutablePath ();
207175
208176 if (executable_path_str.empty ()) {
209177 // GetExecutablePath() is expected to log specific errors.
210178 // 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." );
214180 return nullptr ;
215181 }
216182
217183 size_t last_slash_pos = executable_path_str.find_last_of (L" \\ " );
218184 if (last_slash_pos == std::wstring::npos) {
219185 // 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." );
223187 return nullptr ;
224188 }
225189
@@ -236,10 +200,7 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
236200 // logging an error. For other errors (e.g., access denied on an existing
237201 // file), log them as it's an unexpected issue.
238202 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);
243204 }
244205 return nullptr ; // In all CreateFileW failure cases, return nullptr to fall
245206 // back to stub mode.
@@ -253,10 +214,7 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
253214 0xFFFFFFFF , &overlapped);
254215 if (!bFileLocked) {
255216 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);
260218 CloseHandle (hFile);
261219 return nullptr ;
262220 }
@@ -266,17 +224,15 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
266224 std::vector<BYTE> calculated_hash = CalculateFileSha256 (hFile);
267225
268226 if (calculated_hash.empty ()) {
269- LogError (" VerifyAndLoadAnalyticsLibrary: Hash failed for Analytics DLL." );
227+ LogError (LOG_TAG " Hash failed for Analytics DLL." );
270228 } else {
271229 if (calculated_hash.size () != expected_hash_size) {
272230 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 ());
276232 } else if (memcmp (calculated_hash.data (), expected_hash,
277233 expected_hash_size) != 0 ) {
278234 LogError (
279- " VerifyAndLoadAnalyticsLibrary: Hash mismatch for Analytics DLL." );
235+ LOG_TAG " Hash mismatch for Analytics DLL." );
280236 } else {
281237 // Load the library. LOAD_LIBRARY_SEARCH_APPLICATION_DIR is a security
282238 // measure to help ensure that the DLL is loaded from the application's
@@ -288,31 +244,22 @@ HMODULE VerifyAndLoadAnalyticsLibrary(
288244 LOAD_LIBRARY_SEARCH_APPLICATION_DIR);
289245 if (hModule == NULL ) {
290246 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);
295248 }
296249 }
297250 }
298251
299252 if (bFileLocked) {
300253 if (!UnlockFileEx (hFile, 0 , 0xFFFFFFFF , 0xFFFFFFFF , &overlapped)) {
301254 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);
306256 }
307257 }
308258
309259 if (hFile != INVALID_HANDLE_VALUE) {
310260 if (!CloseHandle (hFile)) {
311261 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);
316263 }
317264 }
318265 return hModule;
0 commit comments