mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Replays: reserve 1 KB of space at end of buffer as a safeguard
This should avoid buffer overruns in the middle of recording. There is already code that checks for buffer size around ticcmd and ghost data write. Demo header is still unsafe with many WAD filenames written, for example. Ghost data and ticcmd should not come close to reaching into this extra space. At the time of writing, ghost data can write up to 102 bytes and ticcmd 20 bytes, per player.
This commit is contained in:
parent
5a86041302
commit
1769b418df
1 changed files with 14 additions and 0 deletions
14
src/g_demo.c
14
src/g_demo.c
|
|
@ -2114,6 +2114,20 @@ void G_RecordDemo(const char *name)
|
|||
|
||||
demo.recording = true;
|
||||
demo.buffer = &demobuf;
|
||||
|
||||
/* FIXME: This whole file is in a wretched state. Take a
|
||||
look at G_WriteAllGhostTics and G_WriteDemoTiccmd, they
|
||||
write a lot of data. It's not realistic to refactor that
|
||||
code in order to know exactly HOW MANY bytes it can write
|
||||
out. So here's the deal. Reserve a decent block of memory
|
||||
at the end of the buffer and never use it. Those bastard
|
||||
functions will check if they overran the buffer, but it
|
||||
should be safe enough because they'll think there's less
|
||||
memory than there actually is and stop early. */
|
||||
const size_t deadspace = 1024;
|
||||
I_Assert(demobuf.size > deadspace);
|
||||
demobuf.size -= deadspace;
|
||||
demobuf.end -= deadspace;
|
||||
}
|
||||
|
||||
void G_RecordMetal(void)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue