Allocate the handles on the heap instead of the stack

This commit is contained in:
Maschell 2020-06-27 12:06:00 +02:00
parent d556609e5c
commit 1b30f0ff11
1 changed files with 28 additions and 5 deletions

View File

@ -16,9 +16,8 @@
****************************************************************************/
#include <cstring>
#include "wups_backend/PluginUtils.h"
#include "wups_backend/PluginMetaInformation.h"
#include "wups_backend/PluginContainer.h"
#include "imports.h"
std::optional<PluginMetaInformation> PluginUtils::getMetaInformationForBuffer(char *buffer, size_t size) {
@ -90,26 +89,46 @@ std::optional<PluginContainer> PluginUtils::getPluginForBuffer(char *buffer, siz
std::vector<PluginContainer> PluginUtils::getLoadedPlugins(uint32_t maxSize) {
std::vector<PluginContainer> result;
plugin_container_handle handles[maxSize];
plugin_container_handle *handles = (plugin_container_handle *) malloc(maxSize * sizeof(plugin_container_handle));
if (!handles) {
return result;
}
uint32_t realSize = 0;
if (WUPSGetLoadedPlugins(handles, maxSize, &realSize) != 0) {
free(handles);
// DEBUG_FUNCTION_LINE("Failed");
return result;
}
if (realSize == 0) {
free(handles);
// DEBUG_FUNCTION_LINE("realsize is 0");
return result;
}
plugin_data_handle dataHandles[realSize];
plugin_data_handle *dataHandles = (plugin_container_handle *) malloc(realSize * sizeof(plugin_container_handle));
if(!dataHandles){
free(handles);
return result;
}
if (WUPSGetPluginDataForContainerHandles(handles, dataHandles, realSize) != 0) {
free(handles);
free(dataHandles);
// DEBUG_FUNCTION_LINE("Failed to get plugin data");
return result;
}
plugin_information information[realSize];
plugin_information* information = (plugin_information *) malloc(realSize * sizeof(plugin_information));
if(information == NULL){
free(handles);
free(dataHandles);
return result;
}
if (WUPSGetMetaInformation(handles, information, realSize) != 0) {
free(handles);
free(dataHandles);
free(information);
// DEBUG_FUNCTION_LINE("Failed to get meta information for handles");
return result;
}
@ -126,6 +145,10 @@ std::vector<PluginContainer> PluginUtils::getLoadedPlugins(uint32_t maxSize) {
result.push_back(PluginContainer(pluginData, metaInfo, handles[i]));
}
free(handles);
free(dataHandles);
free(information);
return result;
}