Fix overflow in backtrace

This commit is contained in:
Matthias Hochsteger 2019-10-31 18:39:45 +01:00
parent 96a9141199
commit 262c656bcb

View File

@ -14,6 +14,7 @@
#include <memory> #include <memory>
#include <cxxabi.h> #include <cxxabi.h>
#include <signal.h> #include <signal.h>
#include <vector>
namespace ngcore namespace ngcore
{ {
@ -104,11 +105,11 @@ namespace ngcore
if(!funcname.empty()) if(!funcname.empty())
{ {
std::array<char, 256> buffer; std::vector<char> buffer(10240);
int status; int status;
size_t size = buffer.size(); size_t size = buffer.size();
abi::__cxa_demangle(funcname.c_str(), buffer.data(), &size, &status); abi::__cxa_demangle(funcname.c_str(), &buffer[0], &size, &status);
out << "in " << yellow << buffer.data() << reset_shell << '\n'; out << "in " << yellow << &buffer[0] << reset_shell << '\n';
std::string nm_command = "nm " + libname + " | grep " + funcname + " | cut -f 1 -d ' '"; std::string nm_command = "nm " + libname + " | grep " + funcname + " | cut -f 1 -d ' '";
std::string output; std::string output;
@ -145,12 +146,12 @@ namespace ngcore
{ {
std::cerr << "Collecting backtrace..." << std::endl; std::cerr << "Collecting backtrace..." << std::endl;
std::stringstream result; std::stringstream result;
void *bt[1024]; void *bt[100];
int bt_size; int bt_size;
char **bt_syms; char **bt_syms;
int i; int i;
bt_size = backtrace(bt, 1024); bt_size = backtrace(bt, 100);
bt_syms = backtrace_symbols(bt, bt_size); bt_syms = backtrace_symbols(bt, bt_size);
Dl_info info; Dl_info info;
for (i = 1; i < bt_size-1; i++) for (i = 1; i < bt_size-1; i++)