projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed potential off-by-one buffer overflow bug when recording tapes
[rocksndiamonds.git]
/
src
/
tape.c
diff --git
a/src/tape.c
b/src/tape.c
index f8e6a5e0594214d8f29f372d70023398113b04e2..5e55cb0453fad9166df5de9c971aaba03950abfc 100644
(file)
--- a/
src/tape.c
+++ b/
src/tape.c
@@
-641,7
+641,10
@@
void TapeHaltRecording()
return;
tape.counter++;
return;
tape.counter++;
- tape.pos[tape.counter].delay = 0;
+
+ // initialize delay for next tape entry (to be able to continue recording)
+ if (tape.counter < MAX_TAPE_LEN)
+ tape.pos[tape.counter].delay = 0;
tape.length = tape.counter;
tape.length_frames = GetTapeLengthFrames();
tape.length = tape.counter;
tape.length_frames = GetTapeLengthFrames();
@@
-1066,7
+1069,10
@@
void TapeQuickLoad()
void InsertSolutionTape()
{
void InsertSolutionTape()
{
- if (!fileExists(getSolutionTapeFilename(level_nr)))
+ boolean level_has_tape = (level.game_engine_type == GAME_ENGINE_TYPE_SP &&
+ level.native_sp_level->demo.is_available);
+
+ if (!fileExists(getSolutionTapeFilename(level_nr)) && !level_has_tape)
{
Request("No solution tape for this level!", REQ_CONFIRM);
{
Request("No solution tape for this level!", REQ_CONFIRM);
@@
-1391,7
+1397,7
@@
static void HandleTapeButtonsExt(int id)
else
{
if (tape.changed)
else
{
if (tape.changed)
- SaveTapeChecked(
tape.
level_nr);
+ SaveTapeChecked(level_nr);
TapeErase();
}
TapeErase();
}