From a0df8384279a9540faf6ba5a529cac5839b2dd8a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 29 Oct 2023 03:38:51 -0500 Subject: [PATCH] fix crash when loading song with no chips --- src/engine/engine.cpp | 6 +++--- src/engine/fileOps.cpp | 20 +++++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 76a307f5b..ae1f63930 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1081,7 +1081,7 @@ bool DivEngine::addSystem(DivSystem which) { song.patchbay.push_back((i<<20)|j); } } else { - song.patchbay.reserve(outs); + if (outs>0) song.patchbay.reserve(outs); for (unsigned int j=0; j0) swapList.reserve(song.systemLen); for (int i=0; i0) chanList.reserve(channelCount); for (int j=0; j0) ds.ins.reserve(ds.insLen); for (int i=0; i0x0b) { ds.waveLen=(unsigned char)reader.readC(); logI("reading wavetables (%d)...",ds.waveLen); - ds.wave.reserve(ds.waveLen); + if (ds.waveLen>0) ds.wave.reserve(ds.waveLen); for (int i=0; ilen=(unsigned char)reader.readI(); @@ -849,7 +849,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { // it appears this byte stored the YMU759 sample rate ymuSampleRate=reader.readC(); } - ds.sample.reserve(ds.sampleLen); + if (ds.sampleLen>0) ds.sample.reserve(ds.sampleLen); for (int i=0; i0) ds.patchbay.reserve(conns); for (unsigned int i=0; istd.volMacro.len; if (realVolMacroLen>127) realVolMacroLen=127; - w->writeC(realVolMacroLen); if (sys==DIV_SYSTEM_C64_6581 || sys==DIV_SYSTEM_C64_8580) { if (i->std.algMacro.len>0) volIsCutoff=true; if (volIsCutoff) { @@ -6083,15 +6090,18 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) { } realVolMacroLen=i->std.algMacro.len; if (realVolMacroLen>127) realVolMacroLen=127; + w->writeC(realVolMacroLen); for (int j=0; jwriteI((-i->std.algMacro.val[j])+18); } } else { + w->writeC(realVolMacroLen); for (int j=0; jwriteI(i->std.volMacro.val[j]); } } } else { + w->writeC(realVolMacroLen); for (int j=0; jwriteI(i->std.volMacro.val[j]); }