Skip to content

Commit 019fce9

Browse files
yskim1501Ryan Lai
authored andcommitted
error handling for -version (#175)
* error handling for -version * add more api checks
1 parent 84cb40b commit 019fce9

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

Tools/WinMLRunner/src/CommandLineArgs.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ void CommandLineArgs::PrintUsage() {
4444
std::cout << " -ThreadInterval <milliseconds>: interval time between two thread creations in milliseconds" << std::endl;
4545
}
4646

47+
void CheckAPICall(int return_value) {
48+
if (return_value == 0) {
49+
auto code = GetLastError();
50+
std::wstring msg = L"failed to get the version of this file with error code: ";
51+
msg += std::to_wstring(code);
52+
throw hresult_invalid_argument(msg.c_str());
53+
}
54+
}
55+
4756
CommandLineArgs::CommandLineArgs(const std::vector<std::wstring> &args)
4857
{
4958
for (UINT i = 0; i < args.size(); i++)
@@ -213,22 +222,26 @@ CommandLineArgs::CommandLineArgs(const std::vector<std::wstring> &args)
213222
else if (_wcsicmp(args[i].c_str(), L"-version") == 0)
214223
{
215224
TCHAR szExeFileName[MAX_PATH];
216-
GetModuleFileName(NULL, szExeFileName, MAX_PATH);
225+
auto ret = GetModuleFileName(NULL, szExeFileName, MAX_PATH);
226+
CheckAPICall(ret);
217227
uint32_t versionInfoSize = GetFileVersionInfoSize(szExeFileName, 0);
218228
wchar_t *pVersionData = new wchar_t[versionInfoSize / sizeof(wchar_t)];
219-
GetFileVersionInfo(szExeFileName, 0, versionInfoSize, pVersionData);
229+
CheckAPICall(GetFileVersionInfo(szExeFileName, 0, versionInfoSize, pVersionData));
220230

221231
wchar_t *pOriginalFilename;
222232
uint32_t originalFilenameSize;
223-
VerQueryValue(pVersionData, L"\\StringFileInfo\\040904b0\\OriginalFilename", (void**)&pOriginalFilename, &originalFilenameSize);
233+
CheckAPICall(VerQueryValue(pVersionData, L"\\StringFileInfo\\040904b0\\OriginalFilename",
234+
(void**)&pOriginalFilename, &originalFilenameSize));
224235

225236
wchar_t *pProductVersion;
226237
uint32_t productVersionSize;
227-
VerQueryValue(pVersionData, L"\\StringFileInfo\\040904b0\\ProductVersion", (void**)&pProductVersion, &productVersionSize);
238+
CheckAPICall(VerQueryValue(pVersionData, L"\\StringFileInfo\\040904b0\\ProductVersion",
239+
(void**)&pProductVersion, &productVersionSize));
228240

229241
wchar_t *pFileVersion;
230242
uint32_t fileVersionSize;
231-
VerQueryValue(pVersionData, L"\\StringFileInfo\\040904b0\\FileVersion", (void**)&pFileVersion, &fileVersionSize);
243+
CheckAPICall(VerQueryValue(pVersionData, L"\\StringFileInfo\\040904b0\\FileVersion",
244+
(void**)&pFileVersion, &fileVersionSize));
232245

233246
std::wcout << pOriginalFilename << std::endl;
234247
std::wcout << L"Version: " << pFileVersion << "." << pProductVersion << std::endl;

0 commit comments

Comments
 (0)