From: <sag...@us...> - 2014-06-18 19:38:24
|
Revision: 4129 http://sourceforge.net/p/modplug/code/4129 Author: saga-games Date: 2014-06-18 19:37:56 +0000 (Wed, 18 Jun 2014) Log Message: ----------- [Fix] Trying to play notes above B-9 in the instrument editor caused a crash (http://bugs.openmpt.org/view.php?id=549). Modified Paths: -------------- trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_ins.h Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2014-06-18 12:07:23 UTC (rev 4128) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2014-06-18 19:37:56 UTC (rev 4129) @@ -23,6 +23,7 @@ #include "ScaleEnvPointsDlg.h" #include "view_ins.h" #include "../soundlib/MIDIEvents.h" +#include "../common/StringFixer.h" OPENMPT_NAMESPACE_BEGIN @@ -1918,16 +1919,15 @@ static DWORD nLastScanCode = 0; -void CViewInstrument::PlayNote(UINT note) -//--------------------------------------- +void CViewInstrument::PlayNote(ModCommand::NOTE note) +//--------------------------------------------------- { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = GetDocument(); if ((pModDoc) && (pMainFrm) && (note > 0) && (note<128)) { CHAR s[64]; - const size_t sizeofS = sizeof(s) / sizeof(s[0]); - if (note >= 0xFE) + if (note >= NOTE_MIN_SPECIAL) { pModDoc->NoteOff(0, (note == NOTE_NOTECUT), m_nInstrument); pMainFrm->SetInfoText(""); @@ -1955,11 +1955,8 @@ s[0] = 0; if ((note) && (note <= NOTE_MAX)) { - const std::string temp = pModDoc->GetrSoundFile().GetNoteName(static_cast<ModCommand::NOTE>(note), m_nInstrument); - if(temp.size() >= sizeofS) - wsprintf(s, "%s", "..."); - else - wsprintf(s, "%s", temp.c_str()); + const std::string temp = pModDoc->GetrSoundFile().GetNoteName(note, m_nInstrument); + mpt::String::Copy(s, temp.c_str()); } pMainFrm->SetInfoText(s); } @@ -2218,13 +2215,13 @@ } if(wParam >= kcInstrumentStartNotes && wParam <= kcInstrumentEndNotes) { - PlayNote(static_cast<UINT>(wParam) - kcInstrumentStartNotes + 1 + pMainFrm->GetBaseOctave() * 12); + PlayNote(static_cast<ModCommand::NOTE>(wParam - kcInstrumentStartNotes + 1 + pMainFrm->GetBaseOctave() * 12)); return wParam; } if(wParam >= kcInstrumentStartNoteStops && wParam <= kcInstrumentEndNoteStops) { - UINT note = static_cast<UINT>(wParam) - kcInstrumentStartNoteStops + 1 + pMainFrm->GetBaseOctave() * 12; - m_baPlayingNote[note] = false; + ModCommand::NOTE note = static_cast<ModCommand::NOTE>(wParam - kcInstrumentStartNoteStops + 1 + pMainFrm->GetBaseOctave() * 12); + if(ModCommand::IsNote(note)) m_baPlayingNote[note] = false; pModDoc->NoteOff(note, false, m_nInstrument); return wParam; } @@ -2439,7 +2436,6 @@ if(pEnv == nullptr || !IsDragItemEnvPoint()) return; if(EnvToggleReleaseNode(m_nDragItem - 1)) { - CModDoc *pModDoc = GetDocument(); // sanity checks are done in GetEnvelopePtr() already SetModified(HINT_ENVELOPE, true); } } Modified: trunk/OpenMPT/mptrack/View_ins.h =================================================================== --- trunk/OpenMPT/mptrack/View_ins.h 2014-06-18 12:07:23 UTC (rev 4128) +++ trunk/OpenMPT/mptrack/View_ins.h 2014-06-18 19:37:56 UTC (rev 4129) @@ -150,7 +150,7 @@ void DrawNcButton(CDC *pDC, UINT nBtn); BOOL GetNcButtonRect(UINT nBtn, LPRECT lpRect); void UpdateNcButtonState(); - void PlayNote(UINT note); + void PlayNote(ModCommand::NOTE note); void DrawGrid(CDC *memDC, UINT speed); void OnEnvZoomIn() { EnvSetZoom(m_fZoom + 1); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |