You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The output resampler in opalSample multiplied the 16.16 interpolation fraction by the
step between two consecutive chip samples in int. Both factors reach 65535, so the
product overflows a 32-bit signed integer whenever a loud track swings more than half
of full scale in one chip sample, which OPL3 material with both banks and rhythm mode
does routinely. The result is undefined behavior: a garbage sample under a plain
compiler, and an immediate abort under UBSan or any toolchain that traps on signed
overflow. The multiply is now 64 bit, in the new opalInterpolate helper. Output for
every non-overflowing sample is unchanged, so this is bit-identical to 2.0.0 wherever
2.0.0 was defined at all.