Skip to content

Commit bdfdbb8

Browse files
committed
[Fix] Fix incorrect usage of CComboBox::InitStorage, causing far too little string memory to be allocated and thus making the call practically useless.
git-svn-id: https://source.openmpt.org/svn/openmpt/trunk/OpenMPT@25203 56274372-70c3-4bfc-bfc3-4c3a0b034d27
1 parent 19180e6 commit bdfdbb8

File tree

4 files changed

+28
-21
lines changed

4 files changed

+28
-21
lines changed

mptrack/ColorConfigDlg.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,8 @@ BOOL COptionsColors::OnInitDialog()
226226
SetDlgItemText(IDC_BUTTON10, FormatFontName(commentFont));
227227

228228
m_ComboPreset.SetRedraw(FALSE);
229-
m_ComboPreset.InitStorage(static_cast<int>(2 + std::size(ColorSchemes)), 20 * sizeof(TCHAR));
229+
const size_t numItems = 2 + std::size(ColorSchemes);
230+
m_ComboPreset.InitStorage(static_cast<int>(numItems), static_cast<UINT>(numItems * 20 * sizeof(TCHAR)));
230231
m_ComboPreset.AddString(_T("Choose a Colour Scheme..."));
231232
m_ComboPreset.AddString(_T("OpenMPT (Default)"));
232233
for(const auto &preset : ColorSchemes)

mptrack/Ctrl_smp.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ BOOL CCtrlSamples::OnInitDialog()
234234
{_T("1:512"), 10},
235235
};
236236
m_ComboZoom.SetRedraw(FALSE);
237-
m_ComboZoom.InitStorage(static_cast<int>(std::size(ZoomLevels)), 4);
237+
m_ComboZoom.InitStorage(static_cast<int>(std::size(ZoomLevels)), static_cast<UINT>(std::size(ZoomLevels) * 5));
238238
for(const auto &[str, data] : ZoomLevels)
239239
{
240240
m_ComboZoom.SetItemData(m_ComboZoom.AddString(str), static_cast<DWORD_PTR>(data));
@@ -266,7 +266,7 @@ BOOL CCtrlSamples::OnInitDialog()
266266
m_SpinVolume.SetRange(0, 64);
267267
m_SpinGlobalVol.SetRange(0, 64);
268268

269-
m_CbnBaseNote.InitStorage(BASENOTE_MAX - BASENOTE_MIN, 4);
269+
m_CbnBaseNote.InitStorage(BASENOTE_MAX - BASENOTE_MIN, static_cast<UINT>((BASENOTE_MAX - BASENOTE_MIN) * 4 * sizeof(TCHAR)));
270270
m_CbnBaseNote.SetRedraw(FALSE);
271271
for(ModCommand::NOTE i = BASENOTE_MIN; i <= BASENOTE_MAX; i++)
272272
{
@@ -277,7 +277,7 @@ BOOL CCtrlSamples::OnInitDialog()
277277

278278
// Pitch selection
279279
// Allow pitch from -12 (1 octave down) to +12 (1 octave up)
280-
m_ComboPitch.InitStorage(25, 4);
280+
m_ComboPitch.InitStorage(25, 25 * 4 * sizeof(TCHAR));
281281
m_ComboPitch.SetRedraw(FALSE);
282282
for(int i = -12 ; i <= 12 ; i++)
283283
{

mptrack/PatternEditorDialogs.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1414,7 +1414,8 @@ BOOL CSplitKeyboardSettings::OnInitDialog()
14141414

14151415
// Octave modifier
14161416
m_CbnOctaveModifier.SetRedraw(FALSE);
1417-
m_CbnSplitVolume.InitStorage(SplitKeyboardSettings::splitOctaveRange * 2 + 1, 9);
1417+
int numItems = SplitKeyboardSettings::splitOctaveRange * 2 + 1;
1418+
m_CbnSplitVolume.InitStorage(numItems, static_cast<UINT>(numItems * 9 * sizeof(TCHAR)));
14181419
for(int i = -SplitKeyboardSettings::splitOctaveRange; i < SplitKeyboardSettings::splitOctaveRange + 1; i++)
14191420
{
14201421
s.Format(i < 0 ? _T("Octave -%d") : i > 0 ? _T("Octave +%d") : _T("No Change"), std::abs(i));
@@ -1427,7 +1428,7 @@ BOOL CSplitKeyboardSettings::OnInitDialog()
14271428

14281429
// Volume
14291430
m_CbnSplitVolume.SetRedraw(FALSE);
1430-
m_CbnSplitVolume.InitStorage(65, 4);
1431+
m_CbnSplitVolume.InitStorage(65, 65 * 4 * sizeof(TCHAR));
14311432
m_CbnSplitVolume.AddString(_T("No Change"));
14321433
m_CbnSplitVolume.SetItemData(0, 0);
14331434
for(int i = 1; i <= 64; i++)
@@ -1441,7 +1442,8 @@ BOOL CSplitKeyboardSettings::OnInitDialog()
14411442

14421443
// Instruments
14431444
m_CbnSplitInstrument.SetRedraw(FALSE);
1444-
m_CbnSplitInstrument.InitStorage(1 + (sndFile.GetNumInstruments() ? sndFile.GetNumInstruments() : sndFile.GetNumSamples()), 16);
1445+
numItems = 1 + (sndFile.GetNumInstruments() ? sndFile.GetNumInstruments() : sndFile.GetNumSamples());
1446+
m_CbnSplitInstrument.InitStorage(numItems, static_cast<UINT>(numItems * 16 * sizeof(TCHAR)));
14451447
m_CbnSplitInstrument.SetItemData(m_CbnSplitInstrument.AddString(_T("No Change")), 0);
14461448

14471449
if(sndFile.GetNumInstruments())

mptrack/PatternFindReplaceDlg.cpp

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,10 @@ class CFindRangeDlg : public DialogBase
6868
AppendNotesToControl(m_cbnMax, static_cast<ModCommand::NOTE>(m_minVal), static_cast<ModCommand::NOTE>(m_maxVal));
6969
} else
7070
{
71-
m_cbnMin.InitStorage(m_minVal - m_maxVal + 1, 4);
72-
m_cbnMax.InitStorage(m_minVal - m_maxVal + 1, 4);
71+
const int numItems = m_minVal - m_maxVal + 1;
72+
const UINT strSize = static_cast<UINT>(numItems * 4 * sizeof(TCHAR));
73+
m_cbnMin.InitStorage(numItems, strSize);
74+
m_cbnMax.InitStorage(numItems, strSize);
7375
const TCHAR *formatString;
7476
if(m_displayMode == kHex && m_maxVal <= 0x0F)
7577
formatString = _T("%01X");
@@ -223,7 +225,7 @@ BOOL CFindReplaceTab::OnInitDialog()
223225
{
224226
int sel = -1;
225227
m_cbnNote.SetRedraw(FALSE);
226-
m_cbnNote.InitStorage(150, 6);
228+
m_cbnNote.InitStorage(150, 150 * 6 * sizeof(TCHAR));
227229
m_cbnNote.SetItemData(m_cbnNote.AddString(_T("...")), NOTE_NONE);
228230
if (m_isReplaceTab)
229231
{
@@ -270,10 +272,10 @@ BOOL CFindReplaceTab::OnInitDialog()
270272

271273
// Volume Command
272274
m_cbnVolCmd.SetRedraw(FALSE);
273-
m_cbnVolCmd.InitStorage(m_effectInfo.GetNumVolCmds(), 15);
274-
m_cbnVolCmd.SetItemData(m_cbnVolCmd.AddString(_T(" None")), (DWORD_PTR)-1);
275275
UINT count = m_effectInfo.GetNumVolCmds();
276-
for (UINT n=0; n<count; n++)
276+
m_cbnVolCmd.InitStorage(count, static_cast<UINT>(count * 15 * sizeof(TCHAR)));
277+
m_cbnVolCmd.SetItemData(m_cbnVolCmd.AddString(_T(" None")), (DWORD_PTR)-1);
278+
for (UINT n = 0; n < count; n++)
277279
{
278280
if(m_effectInfo.GetVolCmdInfo(n, &s) && !s.IsEmpty())
279281
{
@@ -294,10 +296,10 @@ BOOL CFindReplaceTab::OnInitDialog()
294296
// Command
295297
{
296298
m_cbnCommand.SetRedraw(FALSE);
297-
m_cbnCommand.InitStorage(m_effectInfo.GetNumEffects(), 20);
298-
m_cbnCommand.SetItemData(m_cbnCommand.AddString(_T(" None")), (DWORD_PTR)-1);
299299
count = m_effectInfo.GetNumEffects();
300-
for (UINT n=0; n<count; n++)
300+
m_cbnCommand.InitStorage(count, static_cast<UINT>(count * 20 * sizeof(TCHAR)));
301+
m_cbnCommand.SetItemData(m_cbnCommand.AddString(_T(" None")), (DWORD_PTR)-1);
302+
for (UINT n = 0; n < count; n++)
301303
{
302304
if(m_effectInfo.GetEffectInfo(n, &s, true) && !s.IsEmpty())
303305
{
@@ -343,7 +345,8 @@ void CFindReplaceTab::UpdateInstrumentList()
343345
int sel = (oldSelection == 0) ? 0 : -1;
344346
m_cbnInstr.SetRedraw(FALSE);
345347
m_cbnInstr.ResetContent();
346-
m_cbnInstr.InitStorage((isPCEvent ? MAX_MIXPLUGINS : MAX_INSTRUMENTS) + 3, 32);
348+
const int numItems = (isPCEvent ? MAX_MIXPLUGINS : MAX_INSTRUMENTS) + 3;
349+
m_cbnInstr.InitStorage(numItems, static_cast<UINT>(numItems * 32 * sizeof(TCHAR)));
347350
m_cbnInstr.SetItemData(m_cbnInstr.AddString(_T("..")), 0);
348351
if (m_isReplaceTab)
349352
{
@@ -444,7 +447,7 @@ void CFindReplaceTab::UpdateParamList()
444447
Limit(newpos, 0, newcount - 1);
445448
m_cbnParam.SetRedraw(FALSE);
446449
m_cbnParam.ResetContent();
447-
m_cbnParam.InitStorage(newcount + 2, 4);
450+
m_cbnParam.InitStorage(newcount + 2, static_cast<UINT>((newcount + 2) * 4 * sizeof(TCHAR)));
448451

449452
if(m_isReplaceTab)
450453
{
@@ -518,8 +521,9 @@ void CFindReplaceTab::UpdateVolumeList()
518521
AddPluginParameternamesToCombobox(m_cbnPCParam, *m_sndFile.m_MixPlugins[plug].pMixPlugin);
519522
} else
520523
{
521-
m_cbnPCParam.InitStorage(ModCommand::maxColumnValue + 1, 20);
522-
for(int i = 0; i <= ModCommand::maxColumnValue; i++)
524+
const int numItems = ModCommand::maxColumnValue + 1;
525+
m_cbnPCParam.InitStorage(numItems, static_cast<UINT>(numItems * 20 * sizeof(TCHAR)));
526+
for(int i = 0; i < numItems; i++)
523527
{
524528
wsprintf(s, _T("%02u: Parameter %02u"), static_cast<unsigned int>(i), static_cast<unsigned int>(i));
525529
m_cbnPCParam.SetItemData(m_cbnPCParam.AddString(s), i);
@@ -574,7 +578,7 @@ void CFindReplaceTab::UpdateVolumeList()
574578
Limit(newpos, 0, newcount - 1);
575579
m_cbnVolume.SetRedraw(FALSE);
576580
m_cbnVolume.ResetContent();
577-
m_cbnVolume.InitStorage(newcount + 2, 4);
581+
m_cbnVolume.InitStorage(newcount + 2, static_cast<UINT>((newcount + 2) * 4 * sizeof(TCHAR)));
578582
if(m_isReplaceTab)
579583
{
580584
wsprintf(s, _T("+ %d"), m_settings.replaceVolume);

0 commit comments

Comments
 (0)