about summary refs log tree commit diff stats
path: root/Source/PuzzleSerializer.cpp
diff options
context:
space:
mode:
authorjbzdarkid <jbzdarkid@gmail.com>2019-11-18 09:41:22 -0800
committerjbzdarkid <jbzdarkid@gmail.com>2019-11-18 09:41:22 -0800
commitc282663a96ae9704a59c55c9300dbc8c49e0ef39 (patch)
tree071a26b8e58b8aac4d347c6a8200a4b01663abe1 /Source/PuzzleSerializer.cpp
parentbff40e55c9c55fbc8439bb225d1937b2d805e629 (diff)
downloadwitness-tutorializer-c282663a96ae9704a59c55c9300dbc8c49e0ef39.tar.gz
witness-tutorializer-c282663a96ae9704a59c55c9300dbc8c49e0ef39.tar.bz2
witness-tutorializer-c282663a96ae9704a59c55c9300dbc8c49e0ef39.zip
Add sanity checks for overwriting buffers
Diffstat (limited to 'Source/PuzzleSerializer.cpp')
-rw-r--r--Source/PuzzleSerializer.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/Source/PuzzleSerializer.cpp b/Source/PuzzleSerializer.cpp index c1e93a5..e845578 100644 --- a/Source/PuzzleSerializer.cpp +++ b/Source/PuzzleSerializer.cpp
@@ -1,5 +1,6 @@
1#include "PuzzleSerializer.h" 1#include "PuzzleSerializer.h"
2#include "Memory.h" 2#include "Memory.h"
3#include <cassert>
3 4
4#pragma warning (disable:26451) 5#pragma warning (disable:26451)
5#pragma warning (disable:26812) 6#pragma warning (disable:26812)
@@ -47,6 +48,16 @@ void PuzzleSerializer::WritePuzzle(const Puzzle& p, int id) {
47 WriteDecorations(p, id); 48 WriteDecorations(p, id);
48 WriteSequence(p, id); 49 WriteSequence(p, id);
49 50
51#ifndef NDEBUG
52 int maxDots = _memory->ReadEntityData<int>(id, NUM_DOTS, 1)[0];
53 assert(_intersectionFlags.size() <= maxDots);
54 assert(_intersectionLocations.size() <= maxDots*2);
55
56 int maxConnections = _memory->ReadEntityData<int>(id, NUM_CONNECTIONS, 1)[0];
57 assert(_connectionsA.size() <= maxConnections);
58 assert(_connectionsB.size() <= maxConnections);
59#endif
60
50 _memory->WriteEntityData<int>(id, GRID_SIZE_X, {(p.width + 1)/2}); 61 _memory->WriteEntityData<int>(id, GRID_SIZE_X, {(p.width + 1)/2});
51 _memory->WriteEntityData<int>(id, GRID_SIZE_Y, {(p.height + 1)/2}); 62 _memory->WriteEntityData<int>(id, GRID_SIZE_Y, {(p.height + 1)/2});
52 _memory->WriteEntityData<int>(id, NUM_DOTS, {static_cast<int>(_intersectionFlags.size())}); 63 _memory->WriteEntityData<int>(id, NUM_DOTS, {static_cast<int>(_intersectionFlags.size())});
@@ -376,6 +387,10 @@ void PuzzleSerializer::WriteDecorations(const Puzzle& p, int id) {
376 } 387 }
377 } 388 }
378 389
390#ifndef NDEBUG
391 int maxDecorations = _memory->ReadEntityData<int>(id, NUM_DECORATIONS, 1)[0];
392 assert(decorations.size() < maxDecorations);
393#endif
379 _memory->WriteEntityData<int>(id, NUM_DECORATIONS, {static_cast<int>(decorations.size())}); 394 _memory->WriteEntityData<int>(id, NUM_DECORATIONS, {static_cast<int>(decorations.size())});
380 _memory->WriteArray<int>(id, DECORATIONS, decorations); 395 _memory->WriteArray<int>(id, DECORATIONS, decorations);
381} 396}