Crash log: Increase length limit for desync/inconsistency logs
Allocate buffer instead of using stack
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
#include "debug_desync.h"
|
#include "debug_desync.h"
|
||||||
#include "event_logs.h"
|
#include "event_logs.h"
|
||||||
|
#include "scope.h"
|
||||||
|
|
||||||
#include "ai/ai_info.hpp"
|
#include "ai/ai_info.hpp"
|
||||||
#include "game/game.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
|
bool CrashLog::MakeDesyncCrashLog(const std::string *log_in, std::string *log_out, const DesyncExtraInfo &info) const
|
||||||
{
|
{
|
||||||
char filename[MAX_PATH];
|
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;
|
bool ret = true;
|
||||||
|
|
||||||
const char *mode = _network_server ? "server" : "client";
|
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));
|
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);
|
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_out) log_out->assign(buffer);
|
||||||
|
|
||||||
if (log_in && !log_in->empty()) {
|
if (log_in && !log_in->empty()) {
|
||||||
b = strecpy(b, "\n", lastof(buffer), true);
|
b = strecpy(b, "\n", last, true);
|
||||||
b = strecpy(b, log_in->c_str(), lastof(buffer), true);
|
b = strecpy(b, log_in->c_str(), last, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool bret = this->WriteCrashLog(buffer, filename, lastof(filename), name_buffer, info.log_file);
|
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
|
bool CrashLog::MakeInconsistencyLog(const InconsistencyExtraInfo &info) const
|
||||||
{
|
{
|
||||||
char filename[MAX_PATH];
|
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;
|
bool ret = true;
|
||||||
|
|
||||||
char name_buffer[64];
|
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));
|
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");
|
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);
|
bool bret = this->WriteCrashLog(buffer, filename, lastof(filename), name_buffer);
|
||||||
if (bret) {
|
if (bret) {
|
||||||
|
Reference in New Issue
Block a user