Relax module list requirements

Some Windows versions have problems with Steamclient.dll and give it a size of -1
This commit is contained in:
Asher Baker 2019-01-08 21:52:55 +00:00
parent 7aeabf23b5
commit ad9db42aa4
2 changed files with 53 additions and 61 deletions

View File

@ -743,11 +743,6 @@ class UploadThread: public IThread
return kPRLocalError; return kPRLocalError;
} }
// Minidumps missing a module list are basically useless
if (!processState.modules()) {
return kPRLocalError;
}
std::string os_short = ""; std::string os_short = "";
std::string cpu_arch = ""; std::string cpu_arch = "";
if (processState.system_info()) { if (processState.system_info()) {
@ -778,7 +773,7 @@ class UploadThread: public IThread
std::map<const google_breakpad::CodeModule *, unsigned int> moduleMap; std::map<const google_breakpad::CodeModule *, unsigned int> moduleMap;
unsigned int moduleCount = processState.modules()->module_count(); unsigned int moduleCount = processState.modules() ? processState.modules()->module_count() : 0;
for (unsigned int moduleIndex = 0; moduleIndex < moduleCount; ++moduleIndex) { for (unsigned int moduleIndex = 0; moduleIndex < moduleCount; ++moduleIndex) {
auto module = processState.modules()->GetModuleAtIndex(moduleIndex); auto module = processState.modules()->GetModuleAtIndex(moduleIndex);
moduleMap[module] = moduleIndex; moduleMap[module] = moduleIndex;
@ -886,67 +881,69 @@ class UploadThread: public IThread
if (log) fprintf(log, "Got a presubmit token from server: %s\n", tokenBuffer); if (log) fprintf(log, "Got a presubmit token from server: %s\n", tokenBuffer);
} }
auto mainModule = processState.modules()->GetMainModule(); if (moduleCount > 0) {
auto executableBaseDir = PathnameStripper_Directory(mainModule->code_file()); auto mainModule = processState.modules()->GetMainModule();
InitModuleClassificationMap(executableBaseDir); auto executableBaseDir = PathnameStripper_Directory(mainModule->code_file());
InitModuleClassificationMap(executableBaseDir);
// 0 = Disabled // 0 = Disabled
// 1 = System Only // 1 = System Only
// 2 = System + Game // 2 = System + Game
// 3 = System + Game + Addons // 3 = System + Game + Addons
const char *symbolSubmitOptionStr = g_pSM->GetCoreConfigValue("MinidumpSymbolUpload"); const char *symbolSubmitOptionStr = g_pSM->GetCoreConfigValue("MinidumpSymbolUpload");
int symbolSubmitOption = symbolSubmitOptionStr ? atoi(symbolSubmitOptionStr) : 3; int symbolSubmitOption = symbolSubmitOptionStr ? atoi(symbolSubmitOptionStr) : 3;
const char *binarySubmitOption = g_pSM->GetCoreConfigValue("MinidumpBinaryUpload"); const char *binarySubmitOption = g_pSM->GetCoreConfigValue("MinidumpBinaryUpload");
bool canBinarySubmit = !binarySubmitOption || (tolower(binarySubmitOption[0]) == 'y' || binarySubmitOption[0] == '1'); bool canBinarySubmit = !binarySubmitOption || (tolower(binarySubmitOption[0]) == 'y' || binarySubmitOption[0] == '1');
for (unsigned int moduleIndex = 0; moduleIndex < moduleCount; ++moduleIndex) { for (unsigned int moduleIndex = 0; moduleIndex < moduleCount; ++moduleIndex) {
bool submitSymbols = false; bool submitSymbols = false;
bool submitBinary = (response[2 + moduleIndex] == 'U'); bool submitBinary = (response[2 + moduleIndex] == 'U');
#if defined _LINUX #if defined _LINUX
submitSymbols = (response[2 + moduleIndex] == 'Y'); submitSymbols = (response[2 + moduleIndex] == 'Y');
#endif #endif
if (!submitSymbols && !submitBinary) { if (!submitSymbols && !submitBinary) {
continue;
}
auto module = processState.modules()->GetModuleAtIndex(moduleIndex);
auto moduleType = ClassifyModule(module);
if (log) fprintf(log, "Classified module %s as %s\n", module->code_file().c_str(), ModuleTypeCode[moduleType]);
switch (moduleType) {
case kMTUnknown:
continue; continue;
case kMTSystem: }
if (symbolSubmitOption < 1) {
continue;
}
break;
case kMTGame:
if (symbolSubmitOption < 2) {
continue;
}
break;
case kMTAddon:
case kMTExtension:
if (symbolSubmitOption < 3) {
continue;
}
break;
}
if (canBinarySubmit && submitBinary) { auto module = processState.modules()->GetModuleAtIndex(moduleIndex);
UploadModuleFile(module, tokenBuffer);
} auto moduleType = ClassifyModule(module);
if (log) fprintf(log, "Classified module %s as %s\n", module->code_file().c_str(), ModuleTypeCode[moduleType]);
switch (moduleType) {
case kMTUnknown:
continue;
case kMTSystem:
if (symbolSubmitOption < 1) {
continue;
}
break;
case kMTGame:
if (symbolSubmitOption < 2) {
continue;
}
break;
case kMTAddon:
case kMTExtension:
if (symbolSubmitOption < 3) {
continue;
}
break;
}
if (canBinarySubmit && submitBinary) {
UploadModuleFile(module, tokenBuffer);
}
#if defined _LINUX #if defined _LINUX
if (submitSymbols) { if (submitSymbols) {
UploadSymbolFile(module, tokenBuffer); UploadSymbolFile(module, tokenBuffer);
} }
#endif #endif
}
} }
delete[] response; delete[] response;

View File

@ -175,11 +175,6 @@ int main(int argc, char *argv[])
continue; continue;
} }
// Minidumps missing a module list are basically useless
if (!processState.modules()) {
continue;
}
std::string os_short = ""; std::string os_short = "";
std::string cpu_arch = ""; std::string cpu_arch = "";
if (processState.system_info()) { if (processState.system_info()) {
@ -210,7 +205,7 @@ int main(int argc, char *argv[])
std::map<const CodeModule *, unsigned int> moduleMap; std::map<const CodeModule *, unsigned int> moduleMap;
unsigned int moduleCount = processState.modules()->module_count(); unsigned int moduleCount = processState.modules() ? processState.modules()->module_count() : 0;
for (unsigned int moduleIndex = 0; moduleIndex < moduleCount; ++moduleIndex) { for (unsigned int moduleIndex = 0; moduleIndex < moduleCount; ++moduleIndex) {
auto module = processState.modules()->GetModuleAtIndex(moduleIndex); auto module = processState.modules()->GetModuleAtIndex(moduleIndex);
moduleMap[module] = moduleIndex; moduleMap[module] = moduleIndex;