int end;
for (end = 1; buffer[end] != MIDI_CMD_COMMON_SYSEX_END; end++) {
- assert((buffer[end] & 0x80) == 0);
+ if ((buffer[end] & 0x80) != 0) {
+ return -1;
+ }
}
assert(buffer[end] == MIDI_CMD_COMMON_SYSEX_END);
return end + 1;
if (size < 0 || (size_t)size != len) {
return false;
}
+ if (status < 0xf0) {
+ /* Channel messages: all start with status byte followed by
+ * non status bytes.
+ */
+ for (size_t i = 1; i < len; ++i) {
+ if ((buffer[i] & 0x80) != 0) {
+ return false; // Non-status byte has MSb set
+ }
+ }
+ }
return true;
}