From: <sag...@us...> - 2012-12-11 17:39:08
|
Revision: 1454 http://sourceforge.net/p/modplug/code/1454 Author: saga-games Date: 2012-12-11 17:38:58 +0000 (Tue, 11 Dec 2012) Log Message: ----------- [Fix] Fixed possible overflow in sample allocation (when not using ReadSample). [Ref] Added SanitizeLoops to ModSample struct. Modified Paths: -------------- trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters trunk/OpenMPT/soundlib/ITTools.cpp trunk/OpenMPT/soundlib/Load_669.cpp trunk/OpenMPT/soundlib/ModSample.cpp trunk/OpenMPT/soundlib/ModSample.h trunk/OpenMPT/soundlib/SampleFormats.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/WAVTools.cpp trunk/OpenMPT/soundlib/XMTools.cpp Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2012-12-10 18:20:55 UTC (rev 1453) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2012-12-11 17:38:58 UTC (rev 1454) @@ -416,7 +416,7 @@ <Filter>Module Loaders</Filter> </ClCompile> <ClCompile Include="..\soundlib\WAVTools.cpp"> - <Filter>Source Files</Filter> + <Filter>Module Loaders</Filter> </ClCompile> </ItemGroup> <ItemGroup> @@ -732,15 +732,15 @@ <ClInclude Include="..\soundlib\SampleFormatConverters.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="..\soundlib\WAVTools.h"> - <Filter>Header Files</Filter> - </ClInclude> <ClInclude Include="..\common\FlagSet.h"> <Filter>Header Files</Filter> </ClInclude> <ClInclude Include="..\soundlib\FileReader.h"> <Filter>Module Loaders</Filter> </ClInclude> + <ClInclude Include="..\soundlib\WAVTools.h"> + <Filter>Module Loaders</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="res\bitmap1.bmp"> Modified: trunk/OpenMPT/soundlib/ITTools.cpp =================================================================== --- trunk/OpenMPT/soundlib/ITTools.cpp 2012-12-10 18:20:55 UTC (rev 1453) +++ trunk/OpenMPT/soundlib/ITTools.cpp 2012-12-11 17:38:58 UTC (rev 1454) @@ -570,6 +570,7 @@ mptSmp.nLoopEnd = loopend; mptSmp.nSustainStart = susloopbegin; mptSmp.nSustainEnd = susloopend; + mptSmp.SanitizeLoops(); // Auto Vibrato settings static const uint8 autovibit2xm[8] = { VIB_SINE, VIB_RAMP_DOWN, VIB_SQUARE, VIB_RANDOM, VIB_RAMP_UP, 0, 0, 0 }; // IT Vibrato -> OpenMPT VibratoType @@ -668,4 +669,4 @@ runtime = static_cast<uint32>(mptHistory.openTime * (18.2f / HISTORY_TIMER_PRECISION)); } -#endif // MODPLUG_TRACKER \ No newline at end of file +#endif // MODPLUG_TRACKER Modified: trunk/OpenMPT/soundlib/Load_669.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_669.cpp 2012-12-10 18:20:55 UTC (rev 1453) +++ trunk/OpenMPT/soundlib/Load_669.cpp 2012-12-11 17:38:58 UTC (rev 1454) @@ -70,14 +70,10 @@ { mptSmp.nLoopEnd = 0; } - LimitMax(mptSmp.nLoopEnd, mptSmp.nLength); - if(mptSmp.nLoopStart >= mptSmp.nLoopEnd) - { - mptSmp.nLoopStart = mptSmp.nLoopEnd = 0; - } if(mptSmp.nLoopEnd != 0) { mptSmp.uFlags = CHN_LOOP; + mptSmp.SanitizeLoops(); } } }; Modified: trunk/OpenMPT/soundlib/ModSample.cpp =================================================================== --- trunk/OpenMPT/soundlib/ModSample.cpp 2012-12-10 18:20:55 UTC (rev 1453) +++ trunk/OpenMPT/soundlib/ModSample.cpp 2012-12-11 17:38:58 UTC (rev 1454) @@ -135,8 +135,14 @@ size_t ModSample::AllocateSample() //-------------------------------- { + // Prevent overflows... + if(nLength > SIZE_MAX - 6u || SIZE_MAX / GetBytesPerSample() < nLength + 6u) + { + return 0; + } FreeSample(); - size_t sampleSize |