- handleController: bounds-check NRPN/CC controller ID before indexing
last_midiCC_info[] (NRPN IDs can reach 16383, array is sized 1024)
- JaySynthMidiCC::add/remove: also reject negative controller IDs coming
from patch/bank file data, not just out-of-range-high ones
- bankImportXml/loadPatchFromFile: null-check XML elements after
getFirstChildElement()/XmlDocument::parse() before dereferencing, so
malformed/truncated patch or bank files no longer crash on load
- loadBankFromFile/loadPatchFromFile: validate the loaded file is large
enough for the fxBank/fxProgram header, and that the embedded chunk
size fits within the file, before reading through the raw pointer
- processBlock/JaySynth::renderNextBlock: host blocks larger than
SYNTH_MAX_BUFSIZE no longer overflow the fixed-size stack work buffers
or deadlock the render worker threads; oversized blocks are now
rendered in multiple SYNTH_MAX_BUFSIZE-sized passes (pending MIDI
events are correctly held over between passes)
- JaySynth constructor: guard against createInputStream() returning null
when the wavetable file can't be opened
- JaySynth::setParameter/setControl/setPerVoiceControl/setParam/
ClearControls: take the synth's lock, matching renderNextBlock and the
note/controller handlers, to close a data race between parameter
changes (UI/host automation) and audio-thread rendering
Verified with a full rebuild (make) producing JaySynth.so with no new
warnings or errors.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011dhtwRLARk4eiPngcQykLJ
- added ability to import patch file with midicc defined without patch parameter
- fixed notes cut off by calling getStateInformation()
- disabled limiter
- increased version to v1.1.0-pre