1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-27 01:31:42 +00:00

Merge pull request #664 from TomHarte/DataAllocationGuards

Adds safety checks around video data allocation
This commit is contained in:
Thomas Harte 2019-10-19 18:36:05 -04:00 committed by GitHub
commit ddae086661
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 0 deletions

View File

@ -406,6 +406,10 @@ void CRT::set_immediate_default_phase(float phase) {
}
void CRT::output_data(int number_of_cycles, size_t number_of_samples) {
#ifndef NDEBUG
assert(number_of_samples > 0 && number_of_samples <= allocated_data_length_);
allocated_data_length_ = std::numeric_limits<size_t>::min();
#endif
scan_target_->end_data(number_of_samples);
Scan scan;
scan.type = Scan::Type::Data;

View File

@ -10,6 +10,7 @@
#define CRT_hpp
#include <cstdint>
#include <limits>
#include <memory>
#include "../ScanTarget.hpp"
@ -83,6 +84,10 @@ class CRT {
Outputs::Display::ScanTarget::Modals scan_target_modals_;
static const uint8_t DefaultAmplitude = 80;
#ifndef NDEBUG
size_t allocated_data_length_ = std::numeric_limits<size_t>::min();
#endif
public:
/*! Constructs the CRT with a specified clock rate, height and colour subcarrier frequency.
The requested number of buffers, each with the requested number of bytes per pixel,
@ -221,6 +226,9 @@ class CRT {
@returns A pointer to the allocated area if room is available; @c nullptr otherwise.
*/
inline uint8_t *begin_data(std::size_t required_length, std::size_t required_alignment = 1) {
#ifndef NDEBUG
allocated_data_length_ = required_length;
#endif
return scan_target_->begin_data(required_length, required_alignment);
}