fix: remove _s poison
This commit is contained in:
parent
547948a324
commit
5a4f180986
@ -30,8 +30,7 @@ namespace binding
|
|||||||
|
|
||||||
if (value && value < get_num_keys())
|
if (value && value < get_num_keys())
|
||||||
{
|
{
|
||||||
const auto len = sprintf_s(&buffer[bytes_used], (buffer_size_align - bytes_used),
|
const auto len = game::Com_sprintf(&buffer[bytes_used], (buffer_size_align - bytes_used), "bind %s \"%s\"\n", key_button, game::command_whitelist[value]);
|
||||||
"bind %s \"%s\"\n", key_button, game::command_whitelist[value]);
|
|
||||||
|
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
{
|
{
|
||||||
@ -45,8 +44,7 @@ namespace binding
|
|||||||
value -= get_num_keys();
|
value -= get_num_keys();
|
||||||
if (static_cast<size_t>(value) < custom_binds.size() && !custom_binds[value].empty())
|
if (static_cast<size_t>(value) < custom_binds.size() && !custom_binds[value].empty())
|
||||||
{
|
{
|
||||||
const auto len = sprintf_s(&buffer[bytes_used], (buffer_size_align - bytes_used),
|
const auto len = game::Com_sprintf(&buffer[bytes_used], (buffer_size_align - bytes_used), "bind %s \"%s\"\n", key_button, custom_binds[value].data());
|
||||||
"bind %s \"%s\"\n", key_button, custom_binds[value].data());
|
|
||||||
|
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
{
|
{
|
||||||
|
@ -42,7 +42,7 @@ namespace console
|
|||||||
{
|
{
|
||||||
static thread_local char buffer[0x1000];
|
static thread_local char buffer[0x1000];
|
||||||
|
|
||||||
const auto count = vsnprintf_s(buffer, _TRUNCATE, message, *ap);
|
const auto count = vsnprintf(buffer, sizeof(buffer), message, *ap);
|
||||||
|
|
||||||
if (count < 0) return {};
|
if (count < 0) return {};
|
||||||
return {buffer, static_cast<size_t>(count)};
|
return {buffer, static_cast<size_t>(count)};
|
||||||
@ -84,15 +84,14 @@ namespace console
|
|||||||
|
|
||||||
void print_stub(const char* fmt, ...)
|
void print_stub(const char* fmt, ...)
|
||||||
{
|
{
|
||||||
|
char buffer[4096]{};
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
|
[[maybe_unused]] const auto res = vsnprintf(buffer, sizeof(buffer), fmt, ap);
|
||||||
char buffer[4096]{};
|
|
||||||
const auto res = vsnprintf_s(buffer, _TRUNCATE, fmt, ap);
|
|
||||||
(void)res;
|
|
||||||
print_message(buffer);
|
|
||||||
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
|
print_message(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void append_text(const char* text)
|
void append_text(const char* text)
|
||||||
|
@ -348,15 +348,14 @@ namespace demonware
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char buffer[2048];
|
char buffer[2048]{};
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, msg);
|
va_start(ap, msg);
|
||||||
|
vsnprintf(buffer, sizeof(buffer), msg, ap);
|
||||||
vsnprintf_s(buffer, _TRUNCATE, msg, ap);
|
|
||||||
printf("%s: %s\n", function, buffer);
|
|
||||||
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
|
printf("%s: %s\n", function, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void startup_dw()
|
void startup_dw()
|
||||||
|
@ -63,7 +63,7 @@ namespace game_console
|
|||||||
|
|
||||||
void clear()
|
void clear()
|
||||||
{
|
{
|
||||||
strncpy_s(con.buffer, "", sizeof(con.buffer));
|
game::I_strncpyz(con.buffer, "", sizeof(con.buffer));
|
||||||
con.cursor = 0;
|
con.cursor = 0;
|
||||||
|
|
||||||
fixed_input = "";
|
fixed_input = "";
|
||||||
@ -249,7 +249,7 @@ namespace game_console
|
|||||||
dvars::con_inputDvarInactiveValueColor->current.vector, offset);
|
dvars::con_inputDvarInactiveValueColor->current.vector, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
strncpy_s(con.globals.auto_complete_choice, matches[0].data(), 64);
|
game::I_strncpyz(con.globals.auto_complete_choice, matches[0].data(), 64);
|
||||||
con.globals.may_auto_complete = true;
|
con.globals.may_auto_complete = true;
|
||||||
}
|
}
|
||||||
else if (matches.size() > 1)
|
else if (matches.size() > 1)
|
||||||
@ -274,7 +274,7 @@ namespace game_console
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
strncpy_s(con.globals.auto_complete_choice, matches[0].data(), 64);
|
game::I_strncpyz(con.globals.auto_complete_choice, matches[0].data(), 64);
|
||||||
con.globals.may_auto_complete = true;
|
con.globals.may_auto_complete = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -365,11 +365,11 @@ namespace game_console
|
|||||||
|
|
||||||
void print_internal(const char* fmt, ...)
|
void print_internal(const char* fmt, ...)
|
||||||
{
|
{
|
||||||
char va_buffer[0x200]{};
|
char va_buffer[1024]{};
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
vsprintf_s(va_buffer, fmt, ap);
|
vsnprintf(va_buffer, sizeof(va_buffer), fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
const auto formatted = std::string(va_buffer);
|
const auto formatted = std::string(va_buffer);
|
||||||
@ -425,7 +425,7 @@ namespace game_console
|
|||||||
con.buffer[1] = '\0';
|
con.buffer[1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
strncat_s(con.buffer, con.globals.auto_complete_choice, 64);
|
game::I_strncat(con.buffer, sizeof(con.buffer), con.globals.auto_complete_choice);
|
||||||
con.cursor = static_cast<int>(std::string(con.buffer).length());
|
con.cursor = static_cast<int>(std::string(con.buffer).length());
|
||||||
|
|
||||||
if (con.cursor != 254)
|
if (con.cursor != 254)
|
||||||
@ -550,7 +550,7 @@ namespace game_console
|
|||||||
|
|
||||||
if (history_index != -1)
|
if (history_index != -1)
|
||||||
{
|
{
|
||||||
strncpy_s(con.buffer, history.at(history_index).c_str(), sizeof(con.buffer));
|
game::I_strncpyz(con.buffer, history.at(history_index).c_str(), sizeof(con.buffer));
|
||||||
con.cursor = static_cast<int>(strlen(con.buffer));
|
con.cursor = static_cast<int>(strlen(con.buffer));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -565,7 +565,7 @@ namespace game_console
|
|||||||
|
|
||||||
if (history_index != -1)
|
if (history_index != -1)
|
||||||
{
|
{
|
||||||
strncpy_s(con.buffer, history.at(history_index).c_str(), sizeof(con.buffer));
|
game::I_strncpyz(con.buffer, history.at(history_index).c_str(), sizeof(con.buffer));
|
||||||
con.cursor = static_cast<int>(strlen(con.buffer));
|
con.cursor = static_cast<int>(strlen(con.buffer));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -720,7 +720,7 @@ namespace game_console
|
|||||||
con.output_visible = false;
|
con.output_visible = false;
|
||||||
con.display_line_offset = 0;
|
con.display_line_offset = 0;
|
||||||
con.line_count = 0;
|
con.line_count = 0;
|
||||||
strncpy_s(con.buffer, "", sizeof(con.buffer));
|
game::I_strncpyz(con.buffer, "", sizeof(con.buffer));
|
||||||
|
|
||||||
con.globals.x = 0.0f;
|
con.globals.x = 0.0f;
|
||||||
con.globals.y = 0.0f;
|
con.globals.y = 0.0f;
|
||||||
@ -728,7 +728,7 @@ namespace game_console
|
|||||||
con.globals.font_height = 0.0f;
|
con.globals.font_height = 0.0f;
|
||||||
con.globals.may_auto_complete = false;
|
con.globals.may_auto_complete = false;
|
||||||
con.globals.info_line_count = 0;
|
con.globals.info_line_count = 0;
|
||||||
strncpy_s(con.globals.auto_complete_choice, "", 64);
|
game::I_strncpyz(con.globals.auto_complete_choice, "", 64);
|
||||||
|
|
||||||
// add clear command
|
// add clear command
|
||||||
command::add("clear", [&]()
|
command::add("clear", [&]()
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
#include "gsc/script_extension.hpp"
|
#include "gsc/script_extension.hpp"
|
||||||
|
|
||||||
#include <utils/hook.hpp>
|
|
||||||
#include <utils/io.hpp>
|
#include <utils/io.hpp>
|
||||||
#include <utils/string.hpp>
|
#include <utils/string.hpp>
|
||||||
|
|
||||||
@ -23,7 +22,7 @@ namespace game_log
|
|||||||
char buf[1024]{};
|
char buf[1024]{};
|
||||||
std::size_t out_chars = 0;
|
std::size_t out_chars = 0;
|
||||||
|
|
||||||
for (auto i = 0u; i < game::Scr_GetNumParam(); ++i)
|
for (std::uint32_t i = 0; i < game::Scr_GetNumParam(); ++i)
|
||||||
{
|
{
|
||||||
const auto* value = game::Scr_GetString(i);
|
const auto* value = game::Scr_GetString(i);
|
||||||
const auto len = std::strlen(value);
|
const auto len = std::strlen(value);
|
||||||
@ -34,7 +33,7 @@ namespace game_log
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
strncat_s(buf, value, _TRUNCATE);
|
game::I_strncat(buf, sizeof(buf), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_log_printf("%s", buf);
|
g_log_printf("%s", buf);
|
||||||
@ -53,18 +52,11 @@ namespace game_log
|
|||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
|
vsnprintf(buffer, sizeof(buffer), fmt, ap);
|
||||||
vsnprintf_s(buffer, _TRUNCATE, fmt, ap);
|
|
||||||
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
const auto time = *game::level_time / 1000;
|
const auto time = *game::level_time / 1000;
|
||||||
utils::io::write_file(log, utils::string::va("%3i:%i%i %s",
|
utils::io::write_file(log, utils::string::va("%3i:%i%i %s", time / 60, time % 60 / 10, time % 60 % 10, buffer), true);
|
||||||
time / 60,
|
|
||||||
time % 60 / 10,
|
|
||||||
time % 60 % 10,
|
|
||||||
buffer
|
|
||||||
), true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class component final : public component_interface
|
class component final : public component_interface
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
#include "loader/component_loader.hpp"
|
#include "loader/component_loader.hpp"
|
||||||
#include "game/game.hpp"
|
#include "game/game.hpp"
|
||||||
|
|
||||||
#include "party.hpp"
|
|
||||||
#include "console.hpp"
|
#include "console.hpp"
|
||||||
|
|
||||||
#include <utils/hook.hpp>
|
#include <utils/hook.hpp>
|
||||||
@ -11,57 +10,15 @@ namespace logger
|
|||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
utils::hook::detour com_error_hook;
|
|
||||||
|
|
||||||
game::dvar_t* logger_dev = nullptr;
|
game::dvar_t* logger_dev = nullptr;
|
||||||
|
|
||||||
void print_error(const char* msg, ...)
|
|
||||||
{
|
|
||||||
char buffer[2048]{};
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, msg);
|
|
||||||
vsnprintf_s(buffer, _TRUNCATE, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
console::error("%s", buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_com_error(int, const char* msg, ...)
|
|
||||||
{
|
|
||||||
char buffer[2048]{};
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, msg);
|
|
||||||
vsnprintf_s(buffer, _TRUNCATE, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
console::error("%s", buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void com_error_stub(const int error, const char* msg, ...)
|
|
||||||
{
|
|
||||||
char buffer[2048]{};
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, msg);
|
|
||||||
vsnprintf_s(buffer, _TRUNCATE, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
console::error("Error: %s\n", buffer);
|
|
||||||
|
|
||||||
party::clear_sv_motd(); // clear sv_motd on error if it exists
|
|
||||||
|
|
||||||
com_error_hook.invoke<void>(error, "%s", buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_warning(const char* msg, ...)
|
void print_warning(const char* msg, ...)
|
||||||
{
|
{
|
||||||
char buffer[2048]{};
|
char buffer[2048]{};
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, msg);
|
va_start(ap, msg);
|
||||||
vsnprintf_s(buffer, _TRUNCATE, msg, ap);
|
vsnprintf(buffer, sizeof(buffer), msg, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
console::warn("%s", buffer);
|
console::warn("%s", buffer);
|
||||||
@ -73,7 +30,7 @@ namespace logger
|
|||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, msg);
|
va_start(ap, msg);
|
||||||
vsnprintf_s(buffer, _TRUNCATE, msg, ap);
|
vsnprintf(buffer, sizeof(buffer), msg, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
console::info("%s", buffer);
|
console::info("%s", buffer);
|
||||||
@ -90,7 +47,7 @@ namespace logger
|
|||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, msg);
|
va_start(ap, msg);
|
||||||
vsnprintf_s(buffer, _TRUNCATE, msg, ap);
|
vsnprintf(buffer, sizeof(buffer), msg, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
console::info("%s", buffer);
|
console::info("%s", buffer);
|
||||||
@ -157,13 +114,6 @@ namespace logger
|
|||||||
utils::hook::jump(0x140701A1C, print);
|
utils::hook::jump(0x140701A1C, print);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!game::environment::is_sp())
|
|
||||||
{
|
|
||||||
utils::hook::call(0x1404D8543, print_com_error);
|
|
||||||
}
|
|
||||||
|
|
||||||
com_error_hook.create(game::Com_Error, com_error_stub);
|
|
||||||
|
|
||||||
logger_dev = game::Dvar_RegisterBool("logger_dev", false, game::DVAR_FLAG_SAVED);
|
logger_dev = game::Dvar_RegisterBool("logger_dev", false, game::DVAR_FLAG_SAVED);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -160,7 +160,7 @@ namespace party
|
|||||||
if (game::mp::g_entities[i].client)
|
if (game::mp::g_entities[i].client)
|
||||||
{
|
{
|
||||||
char client_name[16] = {0};
|
char client_name[16] = {0};
|
||||||
strncpy_s(client_name, game::mp::g_entities[i].client->name, sizeof(client_name));
|
game::I_strncpyz(client_name, game::mp::g_entities[i].client->name, sizeof(client_name));
|
||||||
game::I_CleanStr(client_name);
|
game::I_CleanStr(client_name);
|
||||||
|
|
||||||
if (client_name == name)
|
if (client_name == name)
|
||||||
|
@ -118,7 +118,7 @@ namespace patches
|
|||||||
char* db_read_raw_file_stub(const char* filename, char* buf, const int size)
|
char* db_read_raw_file_stub(const char* filename, char* buf, const int size)
|
||||||
{
|
{
|
||||||
std::string file_name = filename;
|
std::string file_name = filename;
|
||||||
if (file_name.find(".cfg") == std::string::npos)
|
if (!file_name.ends_with(".cfg"))
|
||||||
{
|
{
|
||||||
file_name.append(".cfg");
|
file_name.append(".cfg");
|
||||||
}
|
}
|
||||||
@ -127,6 +127,7 @@ namespace patches
|
|||||||
if (file.exists())
|
if (file.exists())
|
||||||
{
|
{
|
||||||
snprintf(buf, size, "%s\n", file.get_buffer().data());
|
snprintf(buf, size, "%s\n", file.get_buffer().data());
|
||||||
|
buf[size - 1] = '\0';
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -327,6 +328,9 @@ namespace patches
|
|||||||
|
|
||||||
game::Dvar_RegisterInt("scr_game_spectatetype", 1, 0, 99, game::DVAR_FLAG_REPLICATED);
|
game::Dvar_RegisterInt("scr_game_spectatetype", 1, 0, 99, game::DVAR_FLAG_REPLICATED);
|
||||||
|
|
||||||
|
// Disable Com_Error in NET_SendPacket
|
||||||
|
utils::hook::nop(0x1404D8543, 5);
|
||||||
|
|
||||||
// Prevent clients from ending the game as non host by sending 'end_game' lui notification
|
// Prevent clients from ending the game as non host by sending 'end_game' lui notification
|
||||||
cmd_lui_notify_server_hook.create(0x1402E9390, cmd_lui_notify_server_stub);
|
cmd_lui_notify_server_hook.create(0x1402E9390, cmd_lui_notify_server_stub);
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ namespace rcon
|
|||||||
}
|
}
|
||||||
|
|
||||||
char clean_name[32]{};
|
char clean_name[32]{};
|
||||||
strncpy_s(clean_name, client->name, _TRUNCATE);
|
game::I_strncpyz(clean_name, client->name, sizeof(clean_name));
|
||||||
game::I_CleanStr(clean_name);
|
game::I_CleanStr(clean_name);
|
||||||
|
|
||||||
buffer.append(utils::string::va("%3i %5i %3s %s %32s %16s %21s %5i\n",
|
buffer.append(utils::string::va("%3i %5i %3s %s %32s %16s %21s %5i\n",
|
||||||
|
@ -84,6 +84,36 @@ namespace security
|
|||||||
|
|
||||||
ui_replace_directive_hook.invoke<void>(local_client_num, src_string, dst_string, dst_buffer_size);
|
ui_replace_directive_hook.invoke<void>(local_client_num, src_string, dst_string, dst_buffer_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int hud_elem_set_enum_string_stub(char* string, const char* format, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, format);
|
||||||
|
const auto len = vsnprintf(string, 0x800, format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sv_add_bot_stub(char* string, const char* format, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, format);
|
||||||
|
const auto len = vsnprintf(string, 0x400, format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sv_add_test_client_stub(char* string, const char* format, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, format);
|
||||||
|
const auto len = vsnprintf(string, 0x400, format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class component final : public component_interface
|
class component final : public component_interface
|
||||||
@ -91,11 +121,18 @@ namespace security
|
|||||||
public:
|
public:
|
||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
|
// sprinf
|
||||||
|
utils::hook::call(SELECT_VALUE(0x1402203DF, 0x1402F0BAF), hud_elem_set_enum_string_stub);
|
||||||
|
|
||||||
if (game::environment::is_sp()) return;
|
if (game::environment::is_sp()) return;
|
||||||
|
|
||||||
// Patch vulnerability in PlayerCards_SetCachedPlayerData
|
// Patch vulnerability in PlayerCards_SetCachedPlayerData
|
||||||
utils::hook::call(0x1401BB909, set_cached_playerdata_stub);
|
utils::hook::call(0x1401BB909, set_cached_playerdata_stub);
|
||||||
|
|
||||||
|
// sprinf
|
||||||
|
utils::hook::call(0x140439075, sv_add_bot_stub);
|
||||||
|
utils::hook::call(0x14043932A, sv_add_test_client_stub);
|
||||||
|
|
||||||
// Patch entity overflow
|
// Patch entity overflow
|
||||||
utils::hook::jump(0x14044DE3A, assemble(remap_cached_entities_stub), true);
|
utils::hook::jump(0x14044DE3A, assemble(remap_cached_entities_stub), true);
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ namespace game::engine
|
|||||||
const auto server_command_buf_large = std::make_unique<char[]>(0x20000);
|
const auto server_command_buf_large = std::make_unique<char[]>(0x20000);
|
||||||
|
|
||||||
va_start(va, fmt);
|
va_start(va, fmt);
|
||||||
len = vsnprintf_s(server_command_buf_large.get(), 0x20000, _TRUNCATE, fmt, va);
|
len = vsnprintf(server_command_buf_large.get(), 0x20000, fmt, va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
|
|
||||||
assert(len >= 0);
|
assert(len >= 0);
|
||||||
|
@ -30,6 +30,7 @@ namespace game
|
|||||||
WEAK symbol<void(int index)> Cmd_RemoveCommand{0x1402EE910, 0x1403AFEF0};
|
WEAK symbol<void(int index)> Cmd_RemoveCommand{0x1402EE910, 0x1403AFEF0};
|
||||||
WEAK symbol<void(const char* text_in)> Cmd_TokenizeString{0x1402EEA30, 0x1403B0020};
|
WEAK symbol<void(const char* text_in)> Cmd_TokenizeString{0x1402EEA30, 0x1403B0020};
|
||||||
WEAK symbol<void()> Cmd_EndTokenizeString{0x1402EE000, 0x1403AF5B0};
|
WEAK symbol<void()> Cmd_EndTokenizeString{0x1402EE000, 0x1403AF5B0};
|
||||||
|
WEAK symbol<int(char* dest, int size, const char* fmt, ...)> Com_sprintf{0x140378E30, 0x1404C97B0};
|
||||||
|
|
||||||
WEAK symbol<void(const char* message)> Conbuf_AppendText{0x14038F220, 0x1404D9040};
|
WEAK symbol<void(const char* message)> Conbuf_AppendText{0x14038F220, 0x1404D9040};
|
||||||
|
|
||||||
@ -221,6 +222,7 @@ namespace game
|
|||||||
WEAK symbol<void(unsigned __int64 markPos)> LargeLocalResetToMark{0x140369C40, 0x1404B6790};
|
WEAK symbol<void(unsigned __int64 markPos)> LargeLocalResetToMark{0x140369C40, 0x1404B6790};
|
||||||
|
|
||||||
WEAK symbol<void(char* dest, const char* src, int destsize)> I_strncpyz{0x1403793B0, 0x1404C9E60};
|
WEAK symbol<void(char* dest, const char* src, int destsize)> I_strncpyz{0x1403793B0, 0x1404C9E60};
|
||||||
|
WEAK symbol<void(char* dest, int size, const char* src)> I_strncat{0x1403792E0, 0x1404C9D90};
|
||||||
|
|
||||||
WEAK symbol<void(const char* pszCommand, char* pszBuffer, int iBufferSize)> MSG_WriteReliableCommandToBuffer{0x0, 0x1403E1090};
|
WEAK symbol<void(const char* pszCommand, char* pszBuffer, int iBufferSize)> MSG_WriteReliableCommandToBuffer{0x0, 0x1403E1090};
|
||||||
|
|
||||||
|
@ -64,9 +64,7 @@ LONG WINAPI exception_handler(PEXCEPTION_POINTERS exception_info)
|
|||||||
&exception_information, nullptr, nullptr))
|
&exception_information, nullptr, nullptr))
|
||||||
{
|
{
|
||||||
char buf[4096]{};
|
char buf[4096]{};
|
||||||
sprintf_s(buf, "An exception 0x%08X occurred at location 0x%p\n",
|
sprintf_s(buf, "An exception 0x%08X occurred at location 0x%p\n", exception_info->ExceptionRecord->ExceptionCode, exception_info->ExceptionRecord->ExceptionAddress);
|
||||||
exception_info->ExceptionRecord->ExceptionCode,
|
|
||||||
exception_info->ExceptionRecord->ExceptionAddress);
|
|
||||||
game::show_error(buf);
|
game::show_error(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user