From 82c8b97d9c3e50dfa3f0299c3e6e6b4044258b6f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 24 Feb 2022 16:53:38 -0500 Subject: [PATCH] Neo Geo: safety checks --- src/engine/engine.h | 10 +++++++++- src/engine/platform/ym2610Interface.cpp | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/engine/engine.h b/src/engine/engine.h index c0241699..be04d1cb 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -627,6 +627,10 @@ class DivEngine { size_t adpcmBMemLen; unsigned char* qsoundMem; size_t qsoundMemLen; + unsigned char* qsoundAMem; + size_t qsoundAMemLen; + unsigned char* dpcmMem; + size_t dpcmMemLen; DivEngine(): output(NULL), @@ -685,6 +689,10 @@ class DivEngine { adpcmBMem(NULL), adpcmBMemLen(0), qsoundMem(NULL), - qsoundMemLen(0) {} + qsoundMemLen(0), + qsoundAMem(NULL), + qsoundAMemLen(0), + dpcmMem(NULL), + dpcmMemLen(0) {} }; #endif diff --git a/src/engine/platform/ym2610Interface.cpp b/src/engine/platform/ym2610Interface.cpp index 45fb5288..9154b40e 100644 --- a/src/engine/platform/ym2610Interface.cpp +++ b/src/engine/platform/ym2610Interface.cpp @@ -24,8 +24,12 @@ uint8_t DivYM2610Interface::ymfm_external_read(ymfm::access_class type, uint32_t address) { switch (type) { case ymfm::ACCESS_ADPCM_A: + if (parent->adpcmAMem==NULL) return 0; + if ((address&0xffffff)>=parent->adpcmAMemLen) return 0; return parent->adpcmAMem[address&0xffffff]; case ymfm::ACCESS_ADPCM_B: + if (parent->adpcmBMem==NULL) return 0; + if ((address&0xffffff)>=parent->adpcmBMemLen) return 0; return parent->adpcmBMem[address&0xffffff]; default: return 0;