Check if a plugin has a meta section

This commit is contained in:
Maschell 2024-04-27 17:46:06 +02:00
parent 28d77bd1ce
commit 2b29db165c
3 changed files with 9 additions and 0 deletions

View File

@ -56,6 +56,7 @@ std::optional<PluginMetaInformation> PluginMetaInformationFactory::loadPlugin(st
uint32_t sec_num = reader.sections.size(); uint32_t sec_num = reader.sections.size();
bool hasMetaSection = false;
for (uint32_t i = 0; i < sec_num; ++i) { for (uint32_t i = 0; i < sec_num; ++i) {
ELFIO::section *psec = reader.sections[i]; ELFIO::section *psec = reader.sections[i];
@ -72,6 +73,7 @@ std::optional<PluginMetaInformation> PluginMetaInformationFactory::loadPlugin(st
// Get meta information and check WUPS version: // Get meta information and check WUPS version:
if (psec->get_name() == ".wups.meta") { if (psec->get_name() == ".wups.meta") {
hasMetaSection = true;
const void *sectionData = psec->get_data(); const void *sectionData = psec->get_data();
uint32_t sectionSize = psec->get_size(); uint32_t sectionSize = psec->get_size();
@ -118,6 +120,11 @@ std::optional<PluginMetaInformation> PluginMetaInformationFactory::loadPlugin(st
} }
} }
} }
if (!hasMetaSection) {
DEBUG_FUNCTION_LINE_ERR("File has no \".wups.meta\" section");
error = PLUGIN_PARSE_ERROR_NO_PLUGIN;
return {};
}
pluginInfo.setSize(pluginSize); pluginInfo.setSize(pluginSize);

View File

@ -28,6 +28,7 @@
enum PluginParseErrors { enum PluginParseErrors {
PLUGIN_PARSE_ERROR_NONE, PLUGIN_PARSE_ERROR_NONE,
PLUGIN_PARSE_ERROR_UNKNOWN, PLUGIN_PARSE_ERROR_UNKNOWN,
PLUGIN_PARSE_ERROR_NO_PLUGIN,
PLUGIN_PARSE_ERROR_INCOMPATIBLE_VERSION, PLUGIN_PARSE_ERROR_INCOMPATIBLE_VERSION,
PLUGIN_PARSE_ERROR_BUFFER_EMPTY, PLUGIN_PARSE_ERROR_BUFFER_EMPTY,
PLUGIN_PARSE_ERROR_ELFIO_PARSE_FAILED, PLUGIN_PARSE_ERROR_ELFIO_PARSE_FAILED,

View File

@ -125,6 +125,7 @@ extern "C" PluginBackendApiErrorType WUPSGetPluginMetaInformationEx(WUPSBackendG
case PLUGIN_PARSE_ERROR_BUFFER_EMPTY: case PLUGIN_PARSE_ERROR_BUFFER_EMPTY:
case PLUGIN_PARSE_ERROR_ELFIO_PARSE_FAILED: case PLUGIN_PARSE_ERROR_ELFIO_PARSE_FAILED:
case PLUGIN_PARSE_ERROR_IO_ERROR: case PLUGIN_PARSE_ERROR_IO_ERROR:
case PLUGIN_PARSE_ERROR_NO_PLUGIN:
*errOut = PLUGIN_BACKEND_PLUGIN_PARSE_ERROR_UNKNOWN; *errOut = PLUGIN_BACKEND_PLUGIN_PARSE_ERROR_UNKNOWN;
break; break;
} }