Crash log: Increase length limit for desync/inconsistency logs

Allocate buffer instead of using stack
pull/341/head
Jonathan G Rennison 2 years ago
parent 117eb6637d
commit 90c672fc6d

@ -32,6 +32,7 @@
#include "thread.h"
#include "debug_desync.h"
#include "event_logs.h"
#include "scope.h"
#include "ai/ai_info.hpp"
#include "game/game.hpp"
@ -760,7 +761,14 @@ bool CrashLog::MakeCrashLog()
bool CrashLog::MakeDesyncCrashLog(const std::string *log_in, std::string *log_out, const DesyncExtraInfo &info) const
{
char filename[MAX_PATH];
char buffer[65536 * 2];
const size_t length = 65536 * 16;
char * const buffer = MallocT<char>(length);
auto guard = scope_guard([=]() {
free(buffer);
});
const char * const last = buffer + length - 1;
bool ret = true;
const char *mode = _network_server ? "server" : "client";
@ -771,13 +779,13 @@ bool CrashLog::MakeDesyncCrashLog(const std::string *log_in, std::string *log_ou
strftime(name_buffer_date, lastof(name_buffer) - name_buffer_date, "%Y%m%dT%H%M%SZ", gmtime(&cur_time));
printf("Desync encountered (%s), generating desync log...\n", mode);
char *b = this->FillDesyncCrashLog(buffer, lastof(buffer), info);
char *b = this->FillDesyncCrashLog(buffer, last, info);
if (log_out) log_out->assign(buffer);
if (log_in && !log_in->empty()) {
b = strecpy(b, "\n", lastof(buffer), true);
b = strecpy(b, log_in->c_str(), lastof(buffer), true);
b = strecpy(b, "\n", last, true);
b = strecpy(b, log_in->c_str(), last, true);
}
bool bret = this->WriteCrashLog(buffer, filename, lastof(filename), name_buffer, info.log_file);
@ -824,7 +832,14 @@ bool CrashLog::MakeDesyncCrashLog(const std::string *log_in, std::string *log_ou
bool CrashLog::MakeInconsistencyLog(const InconsistencyExtraInfo &info) const
{
char filename[MAX_PATH];
char buffer[65536 * 2];
const size_t length = 65536 * 16;
char * const buffer = MallocT<char>(length);
auto guard = scope_guard([=]() {
free(buffer);
});
const char * const last = buffer + length - 1;
bool ret = true;
char name_buffer[64];
@ -833,7 +848,7 @@ bool CrashLog::MakeInconsistencyLog(const InconsistencyExtraInfo &info) const
strftime(name_buffer_date, lastof(name_buffer) - name_buffer_date, "%Y%m%dT%H%M%SZ", gmtime(&cur_time));
printf("Inconsistency encountered, generating diagnostics log...\n");
this->FillInconsistencyLog(buffer, lastof(buffer), info);
this->FillInconsistencyLog(buffer, last, info);
bool bret = this->WriteCrashLog(buffer, filename, lastof(filename), name_buffer);
if (bret) {

Loading…
Cancel
Save