diff --git a/Frameworks/playptmod/playptmod/playptmod.c b/Frameworks/playptmod/playptmod/playptmod.c index 56f21e2a2..61e2d0902 100644 --- a/Frameworks/playptmod/playptmod/playptmod.c +++ b/Frameworks/playptmod/playptmod/playptmod.c @@ -1346,7 +1346,15 @@ int playptmod_LoadMem(void *_p, const unsigned char *buf, unsigned long bufLengt { s->iffSize = j + 8; s->length -= s->iffSize; - if (s->loopStart >= s->iffSize) s->loopStart -= s->iffSize; + + // Relocate loopStart + if (s->loopStart >= ((int32_t)(((j) + 8) & 0xFFFFFFFE))) // even'ify unit + s->loopStart -= ((int32_t)(((j) + 8) & 0xFFFFFFFE)); + + // Fix loopStart+loopLength > sampleLength + while ((s->loopStart + s->loopLength) > s->length) + s->loopLength--; + break; } }