summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/midi_source.h3
-rw-r--r--libs/ardour/ardour/midi_track.h1
-rw-r--r--libs/ardour/midi_buffer.cc13
-rw-r--r--libs/ardour/midi_track.cc8
-rw-r--r--libs/evoral/src/SMF.cpp2
-rw-r--r--libs/evoral/src/Sequence.cpp2
6 files changed, 19 insertions, 10 deletions
diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h
index 9e01881186..3f8ed82310 100644
--- a/libs/ardour/ardour/midi_source.h
+++ b/libs/ardour/ardour/midi_source.h
@@ -99,7 +99,8 @@ class MidiSource : public Source
protected:
virtual void flush_midi() = 0;
- virtual nframes_t read_unlocked (MidiRingBuffer<nframes_t>& dst, nframes_t start, nframes_t cnt, nframes_t stamp_offset, nframes_t negative_stamp_offset) const = 0;
+ virtual nframes_t read_unlocked (MidiRingBuffer<nframes_t>& dst, nframes_t start, nframes_t cnt,
+ nframes_t stamp_offset, nframes_t negative_stamp_offset) const = 0;
virtual nframes_t write_unlocked (MidiRingBuffer<nframes_t>& dst, nframes_t cnt) = 0;
mutable Glib::Mutex _lock;
diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h
index d4054066f1..04f3d055c3 100644
--- a/libs/ardour/ardour/midi_track.h
+++ b/libs/ardour/ardour/midi_track.h
@@ -95,7 +95,6 @@ protected:
int _set_state (const XMLNode&, bool call_base);
private:
-
void write_controller_messages(MidiBuffer& buf,
nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset);
diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc
index b0e46f8ad1..8a7d67e2e6 100644
--- a/libs/ardour/midi_buffer.cc
+++ b/libs/ardour/midi_buffer.cc
@@ -135,8 +135,12 @@ MidiBuffer::push_back(const Evoral::MIDIEvent<TimeType>& ev)
<< " stamp size: " << stamp_size << " \n";*/
if (_size + stamp_size + ev.size() >= _capacity) {
- cerr << "MidiBuffer::push_back failed (buffer is full)"
- << endl;
+ cerr << "MidiBuffer::push_back failed (buffer is full)" << endl;
+ return false;
+ }
+
+ if (!Evoral::midi_event_is_valid(ev.buffer(), ev.size())) {
+ cerr << "WARNING: MidiBuffer ignoring illegal MIDI event" << endl;
return false;
}
@@ -166,6 +170,11 @@ MidiBuffer::push_back(const jack_midi_event_t& ev)
cerr << "MidiBuffer::push_back failed (buffer is full)" << endl;
return false;
}
+
+ if (!Evoral::midi_event_is_valid(ev.buffer, ev.size)) {
+ cerr << "WARNING: MidiBuffer ignoring illegal MIDI event" << endl;
+ return false;
+ }
uint8_t* const write_loc = _data + _size;
*((TimeType*)write_loc) = ev.time;
diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc
index 946ac3440b..aff7ed4d15 100644
--- a/libs/ardour/midi_track.cc
+++ b/libs/ardour/midi_track.cc
@@ -23,6 +23,7 @@
#include <pbd/enumwriter.h>
#include <midi++/events.h>
+#include <evoral/midi_util.h>
#include <ardour/midi_track.h>
#include <ardour/midi_diskstream.h>
@@ -662,11 +663,10 @@ MidiTrack::midi_panic()
bool
MidiTrack::write_immediate_event(size_t size, const uint8_t* buf)
{
- /*printf("Write immediate event: ");
- for (size_t i=0; i < size; ++i) {
- printf("%X ", buf[i]);
+ if (!Evoral::midi_event_is_valid(buf, size)) {
+ cerr << "WARNING: Ignoring illegal immediate MIDI event" << endl;
+ return false;
}
- printf("\n");*/
const uint32_t type = EventTypeMap::instance().midi_event_type(buf[0]);
return (_immediate_events.write(0, type, size, buf) == size);
}
diff --git a/libs/evoral/src/SMF.cpp b/libs/evoral/src/SMF.cpp
index 17c94924f8..d7d052e3f0 100644
--- a/libs/evoral/src/SMF.cpp
+++ b/libs/evoral/src/SMF.cpp
@@ -228,7 +228,7 @@ SMF::append_event_delta(uint32_t delta_t, uint32_t size, const uint8_t* buf)
} printf("\n");*/
if (!midi_event_is_valid(buf, size)) {
- cerr << "WARNING: Ignoring illegal MIDI event" << endl;
+ cerr << "WARNING: SMF ignoring illegal MIDI event" << endl;
return;
}
diff --git a/libs/evoral/src/Sequence.cpp b/libs/evoral/src/Sequence.cpp
index ee5fabccb8..ac0ca231f1 100644
--- a/libs/evoral/src/Sequence.cpp
+++ b/libs/evoral/src/Sequence.cpp
@@ -581,7 +581,7 @@ Sequence<Time>::append(const Event<Time>& event)
assert(_writing);
if (!midi_event_is_valid(ev.buffer(), ev.size())) {
- cerr << "WARNING: Ignoring illegal MIDI event" << endl;
+ cerr << "WARNING: Sequence ignoring illegal MIDI event" << endl;
return;
}