1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-29 12:50:28 +00:00

Adds a check against overrunning data.

This commit is contained in:
Thomas Harte 2019-10-19 18:17:44 -04:00
parent e8bc254f3f
commit 418cd07e17
2 changed files with 10 additions and 0 deletions

View File

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

View File

@ -83,6 +83,10 @@ class CRT {
Outputs::Display::ScanTarget::Modals scan_target_modals_; Outputs::Display::ScanTarget::Modals scan_target_modals_;
static const uint8_t DefaultAmplitude = 80; static const uint8_t DefaultAmplitude = 80;
#ifndef NDEBUG
size_t allocated_data_length_ = 0;
#endif
public: public:
/*! Constructs the CRT with a specified clock rate, height and colour subcarrier frequency. /*! 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, The requested number of buffers, each with the requested number of bytes per pixel,
@ -221,6 +225,9 @@ class CRT {
@returns A pointer to the allocated area if room is available; @c nullptr otherwise. @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) { 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); return scan_target_->begin_data(required_length, required_alignment);
} }