From: <sag...@us...> - 2009-08-20 20:44:03
|
Revision: 336 http://modplug.svn.sourceforge.net/modplug/?rev=336&view=rev Author: saga-games Date: 2009-08-20 20:43:52 +0000 (Thu, 20 Aug 2009) Log Message: ----------- [Ref] Dabbling with order limits (especially in the module loaders) so that... [Fix] ...Inserting more than 128 orders in MOD format is not possible anymore. [Fix] More order overflow checks [Fix] Fixed checks when Instruments or Samples were created. Also added test checks for those numbers. [Mod] Moved tagging.h into the appropriate "folder" of the project file. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/mptrack.vcproj trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/mptrack/test/test.cpp trunk/OpenMPT/mptrack/typedefs.h trunk/OpenMPT/soundlib/LOAD_AMF.CPP trunk/OpenMPT/soundlib/LOAD_DBM.CPP trunk/OpenMPT/soundlib/LOAD_DMF.CPP trunk/OpenMPT/soundlib/LOAD_DSM.CPP trunk/OpenMPT/soundlib/Load_ams.cpp trunk/OpenMPT/soundlib/Load_far.cpp trunk/OpenMPT/soundlib/Load_imf.cpp trunk/OpenMPT/soundlib/Load_mdl.cpp trunk/OpenMPT/soundlib/Load_med.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Load_mod.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Load_okt.cpp trunk/OpenMPT/soundlib/Load_psm.cpp trunk/OpenMPT/soundlib/Load_wav.cpp trunk/OpenMPT/soundlib/Sndfile.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -1503,7 +1503,7 @@ } BOOL bFirst = (pSndFile->m_nInstruments) ? FALSE : TRUE; LONG ins = m_pModDoc->InsertInstrument(0); - if (ins > 0) + if (ins != INSTRUMENTINDEX_INVALID) { SetCurrentInstrument(ins); m_pModDoc->UpdateAllViews(NULL, (ins << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); @@ -1525,7 +1525,7 @@ { BOOL bFirst = (pSndFile->m_nInstruments) ? FALSE : TRUE; LONG ins = m_pModDoc->InsertInstrument(0, m_nInstrument); - if (ins > 0) + if (ins != INSTRUMENTINDEX_INVALID) { SetCurrentInstrument(ins); m_pModDoc->UpdateAllViews(NULL, (ins << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -877,6 +877,8 @@ ORD_SELECTION selection = m_OrderList.GetCurSel(false); ORDERINDEX nInsertCount = selection.nOrdHi - selection.nOrdLo; ORDERINDEX nInsertWhere = selection.nOrdLo + nInsertCount + 1; + if (nInsertWhere >= pSndFile->GetModSpecifications().ordersMax) + return; bool bSuccess = false; // has this pattern been duplicated already? (for multiselect) vector<PATTERNINDEX> pReplaceIndex; @@ -917,14 +919,15 @@ nNewPat = pReplaceIndex[nCurPat]; // take care of patterns that have been duplicated before else nNewPat= pSndFile->Order[selection.nOrdLo + i]; - pSndFile->Order[selection.nOrdLo + i + nInsertCount + 1] = nNewPat; + if (selection.nOrdLo + i + nInsertCount + 1 < pSndFile->Order.GetCount()) + pSndFile->Order[selection.nOrdLo + i + nInsertCount + 1] = nNewPat; } } if(bSuccess) { m_OrderList.InvalidateRect(NULL, FALSE); m_OrderList.SetCurSel(nInsertWhere); - SetCurrentPattern(pSndFile->Order[nInsertWhere]); + SetCurrentPattern(pSndFile->Order[min(nInsertWhere, pSndFile->Order.GetCount()-1)]); m_pModDoc->SetModified(); m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE|HINT_PATNAMES, this); if(selection.nOrdHi != selection.nOrdLo) m_OrderList.m_nScrollPos2nd = nInsertWhere + nInsertCount; Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -570,15 +570,12 @@ s[0] = 0; if ((nOrder >= 0) && (rect.left + m_cxFont - 4 <= rcClient.right)) { - if (nOrder == pSndFile->Order.GetInvalidPatIndex()) strcpy(s, "---"); //Print the 'dots' - else + if (nIndex < pSndFile->Order.GetCount()) { - if (nOrder < pSndFile->Patterns.Size()) wsprintf(s, "%d", nOrder); - else - { - if(nOrder == pSndFile->Order.GetIgnoreIndex()) strcpy(s, "+++"); - else strcpy(s, "???"); - } + if (nOrder == pSndFile->Order.GetInvalidPatIndex()) strcpy(s, "---"); + else if (nOrder == pSndFile->Order.GetIgnoreIndex()) strcpy(s, "+++"); + else if (nOrder < pSndFile->Patterns.Size()) wsprintf(s, "%d", nOrder); + else strcpy(s, "???"); } } dc.SetTextColor((bHighLight) ? colorTextSel : colorText); @@ -912,7 +909,7 @@ ORD_SELECTION selection = GetCurSel(false); ORDERINDEX nInsertCount = selection.nOrdHi - selection.nOrdLo, nInsertEnd = selection.nOrdHi; - for(int i = 0; i <= nInsertCount; i++) + for(ORDERINDEX i = 0; i <= nInsertCount; i++) { //Checking whether there is some pattern at the end of orderlist. @@ -922,7 +919,7 @@ pSndFile->Order.push_back(pSndFile->Order.GetInvalidPatIndex()); } - for (int i=pSndFile->Order.size() - 1; i>nInsertEnd; i--) pSndFile->Order[i] = pSndFile->Order[i - 1]; + for(int j = pSndFile->Order.size() - 1; j > nInsertEnd; j--) pSndFile->Order[j] = pSndFile->Order[j - 1]; } // now that there is enough space in the order list, overwrite the orders for(ORDERINDEX i = 0; i <= nInsertCount; i++) @@ -930,8 +927,8 @@ if(nInsertEnd + i + 1 < pSndFile->GetModSpecifications().ordersMax) pSndFile->Order[nInsertEnd + i + 1] = pSndFile->Order[nInsertEnd - nInsertCount + i]; } - m_nScrollPos = nInsertEnd + 1; - m_nScrollPos2nd = m_nScrollPos + nInsertCount; + m_nScrollPos = min(nInsertEnd + 1, pSndFile->Order.GetCount() - 1); + m_nScrollPos2nd = min(m_nScrollPos + nInsertCount, pSndFile->Order.GetCount() - 1); InvalidateRect(NULL, FALSE); m_pModDoc->SetModified(); m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this); Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -884,7 +884,7 @@ //------------------------------ { LONG smp = m_pModDoc->InsertSample(TRUE); - if (smp > 0) + if (smp != SAMPLEINDEX_INVALID) { if(pSampleUndoBuffer) OnPitchShiftTimeStretchCancel(); Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -1987,7 +1987,7 @@ //---------------------------- { LONG smp = InsertSample(); - if (smp >= 0) ViewSample(smp); + if (smp != SAMPLEINDEX_INVALID) ViewSample(smp); } @@ -1995,7 +1995,7 @@ //-------------------------------- { LONG ins = InsertInstrument(); - if (ins >= 0) ViewInstrument(ins); + if (ins != INSTRUMENTINDEX_INVALID) ViewInstrument(ins); } Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/Moddoc.h 2009-08-20 20:43:52 UTC (rev 336) @@ -199,7 +199,7 @@ PATTERNINDEX InsertPattern(ORDERINDEX nOrd = -1, ROWINDEX nRows = 64); SAMPLEINDEX InsertSample(bool bLimit = false); - INSTRUMENTINDEX InsertInstrument(LONG lSample=0, LONG lDuplicate=0); + INSTRUMENTINDEX InsertInstrument(LONG lSample = 0, LONG lDuplicate = 0); void InitializeInstrument(MODINSTRUMENT *pIns, UINT nsample=0); bool RemoveOrder(ORDERINDEX n); bool RemovePattern(PATTERNINDEX n); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -1661,10 +1661,10 @@ } } if (((bLimit) && (i >= 200) && (!m_SndFile.m_nInstruments)) - || (i >= MAX_SAMPLES)) + || (i >= m_SndFile.GetModSpecifications().samplesMax)) { ErrorBox(IDS_ERR_TOOMANYSMP, CMainFrame::GetMainFrame()); - return -1; + return SAMPLEINDEX_INVALID; } if (!m_SndFile.m_szNames[i][0]) strcpy(m_SndFile.m_szNames[i], "untitled"); MODSAMPLE *pSmp = &m_SndFile.Samples[i]; @@ -1690,7 +1690,8 @@ //----------------------------------------------------------- { MODINSTRUMENT *pDup = NULL; - if ((m_SndFile.m_nType != MOD_TYPE_XM) && !(m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) return -1; + INSTRUMENTINDEX nInstrumentMax = m_SndFile.GetModSpecifications().instrumentsMax - 1; + if ((m_SndFile.m_nType != MOD_TYPE_XM) && !(m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) return INSTRUMENTINDEX_INVALID; if ((lDuplicate > 0) && (lDuplicate <= (LONG)m_SndFile.m_nInstruments)) { pDup = m_SndFile.Instruments[lDuplicate]; @@ -1702,7 +1703,7 @@ if (n == IDYES) { UINT nInstruments = m_SndFile.m_nSamples; - if (nInstruments >= MAX_INSTRUMENTS) nInstruments = MAX_INSTRUMENTS-1; + if (nInstruments > nInstrumentMax) nInstruments = nInstrumentMax; for (UINT smp=1; smp<=nInstruments; smp++) { m_SndFile.Samples[smp].uFlags &= ~CHN_MUTE; @@ -1721,7 +1722,7 @@ } m_SndFile.m_nInstruments = nInstruments; } else - if (n != IDNO) return -1; + if (n != IDNO) return INSTRUMENTINDEX_INVALID; } UINT newins = 0; for (UINT i=1; i<=m_SndFile.m_nInstruments; i++) @@ -1734,10 +1735,10 @@ } if (!newins) { - if (m_SndFile.m_nInstruments >= MAX_INSTRUMENTS-1) + if (m_SndFile.m_nInstruments >= nInstrumentMax) { ErrorBox(IDS_ERR_TOOMANYINS, CMainFrame::GetMainFrame()); - return -1; + return INSTRUMENTINDEX_INVALID; } newins = ++m_SndFile.m_nInstruments; } @@ -1745,7 +1746,7 @@ if (pIns) { UINT newsmp = 0; - if ((lSample > 0) && (lSample < MAX_SAMPLES)) + if ((lSample > 0) && (lSample < m_SndFile.GetModSpecifications().samplesMax)) { newsmp = lSample; } else @@ -1762,7 +1763,7 @@ if (!newsmp) { int inssmp = InsertSample(); - if (inssmp > 0) newsmp = inssmp; + if (inssmp != SAMPLEINDEX_INVALID) newsmp = inssmp; } } BEGIN_CRITICAL(); @@ -1784,7 +1785,7 @@ } else { ErrorBox(IDS_ERR_OUTOFMEMORY, CMainFrame::GetMainFrame()); - return -1; + return INSTRUMENTINDEX_INVALID; } return newins; } Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2009-08-20 20:43:52 UTC (rev 336) @@ -481,9 +481,6 @@ RelativePath=".\tagging.cpp"> </File> <File - RelativePath=".\tagging.h"> - </File> - <File RelativePath=".\view_com.cpp"> </File> <File @@ -870,6 +867,9 @@ RelativePath=".\StdAfx.h"> </File> <File + RelativePath=".\tagging.h"> + </File> + <File RelativePath=".\typedefs.h"> </File> <File Modified: trunk/OpenMPT/mptrack/mptrack_08.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_08.vcproj 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/mptrack_08.vcproj 2009-08-20 20:43:52 UTC (rev 336) @@ -645,10 +645,6 @@ > </File> <File - RelativePath=".\tagging.h" - > - </File> - <File RelativePath=".\view_com.cpp" > </File> @@ -1151,6 +1147,10 @@ > </File> <File + RelativePath=".\tagging.h" + > + </File> + <File RelativePath=".\typedefs.h" > </File> Modified: trunk/OpenMPT/mptrack/test/test.cpp =================================================================== --- trunk/OpenMPT/mptrack/test/test.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/test/test.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -163,6 +163,9 @@ VERIFY_EQUAL(ROWINDEX_MAX, (std::numeric_limits<ROWINDEX>::max)()); VERIFY_EQUAL(ORDERINDEX_MAX, (std::numeric_limits<ORDERINDEX>::max)()); + VERIFY_EQUAL(PATTERNINDEX_MAX, (std::numeric_limits<PATTERNINDEX>::max)()); + VERIFY_EQUAL(SAMPLEINDEX_MAX, (std::numeric_limits<SAMPLEINDEX>::max)()); + VERIFY_EQUAL(INSTRUMENTINDEX_MAX, (std::numeric_limits<INSTRUMENTINDEX>::max)()); } Modified: trunk/OpenMPT/mptrack/typedefs.h =================================================================== --- trunk/OpenMPT/mptrack/typedefs.h 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/mptrack/typedefs.h 2009-08-20 20:43:52 UTC (rev 336) @@ -43,7 +43,11 @@ typedef uint8 PLUGINDEX; typedef uint16 TEMPO; typedef uint16 SAMPLEINDEX; + const SAMPLEINDEX SAMPLEINDEX_MAX = uint16_max; + const SAMPLEINDEX SAMPLEINDEX_INVALID = SAMPLEINDEX_MAX; typedef uint16 INSTRUMENTINDEX; + const SAMPLEINDEX INSTRUMENTINDEX_MAX = uint16_max; + const SAMPLEINDEX INSTRUMENTINDEX_INVALID = INSTRUMENTINDEX_MAX; typedef uint32 MODTYPE; Modified: trunk/OpenMPT/soundlib/LOAD_AMF.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_AMF.CPP 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/LOAD_AMF.CPP 2009-08-20 20:43:52 UTC (rev 336) @@ -191,10 +191,7 @@ m_nSamples = 31; m_nDefaultTempo = 125; m_nDefaultSpeed = 6; - for (UINT iOrd=0; iOrd<MAX_ORDERS; iOrd++) - { - Order[iOrd] = (iOrd < numorders) ? lpStream[dwMemPos+iOrd] : Order.GetInvalidPatIndex(); - } + Order.ReadAsByte(lpStream + dwMemPos, numorders, dwMemLength - dwMemPos); dwMemPos = 294; // ??? for (UINT iSmp=0; iSmp<numsamples; iSmp++) { @@ -307,21 +304,18 @@ dwMemPos += 2; } // Setup sequence list - for (UINT iOrd=0; iOrd<MAX_ORDERS; iOrd++) + Order.resize(pfh->numorders, Order.GetInvalidPatIndex()); + for (UINT iOrd=0; iOrd < pfh->numorders; iOrd++) { - Order[iOrd] = Order.GetInvalidPatIndex(); - if (iOrd < pfh->numorders) + Order[iOrd] = iOrd; + Patterns[iOrd].Resize(64); + if (pfh->version >= 14) { - Order[iOrd] = iOrd; - Patterns[iOrd].Resize(64); - if (pfh->version >= 14) - { - Patterns[iOrd].Resize(LittleEndianW(*(USHORT *)(lpStream+dwMemPos))); - dwMemPos += 2; - } - ptracks[iOrd] = (USHORT *)(lpStream+dwMemPos); - dwMemPos += m_nChannels * sizeof(USHORT); + Patterns[iOrd].Resize(LittleEndianW(*(USHORT *)(lpStream+dwMemPos))); + dwMemPos += 2; } + ptracks[iOrd] = (USHORT *)(lpStream+dwMemPos); + dwMemPos += m_nChannels * sizeof(USHORT); } if (dwMemPos + m_nSamples * (sizeof(AMFSAMPLE)+8) > dwMemLength) return true; // Read Samples Modified: trunk/OpenMPT/soundlib/LOAD_DBM.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2009-08-20 20:43:52 UTC (rev 336) @@ -120,10 +120,11 @@ if (m_nChannels > 64) m_nChannels = 64; memcpy(m_szNames[0], (pfh->songname[0]) ? pfh->songname : pfh->songname2, 32); m_szNames[0][31] = 0; + Order.resize(nOrders, Order.GetInvalidPatIndex()); for (UINT iOrd=0; iOrd < nOrders; iOrd++) { - Order[iOrd] = lpStream[dwMemPos+iOrd*2+1]; - if (iOrd >= MAX_ORDERS-2) break; + if (iOrd >= MAX_ORDERS) break; + Order[iOrd] = (PATTERNINDEX)BigEndianW(*((WORD *)(lpStream + dwMemPos + iOrd * 2))); } dwMemPos += 2*nOrders; while (dwMemPos + 10 < dwMemLength) Modified: trunk/OpenMPT/soundlib/LOAD_DMF.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_DMF.CPP 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/LOAD_DMF.CPP 2009-08-20 20:43:52 UTC (rev 336) @@ -145,8 +145,9 @@ { UINT nseq = sequ->seqsize >> 1; if (nseq >= MAX_ORDERS-1) nseq = MAX_ORDERS-1; + Order.resize(nseq, Order.GetInvalidPatIndex()); if (sequ->loopstart < nseq) m_nRestartPos = sequ->loopstart; - for (UINT i=0; i<nseq; i++) Order[i] = (BYTE)sequ->sequ[i]; + for (UINT i = 0; i < nseq; i++) Order[i] = (PATTERNINDEX)sequ->sequ[i]; } dwMemPos += sequ->seqsize + 8; break; Modified: trunk/OpenMPT/soundlib/LOAD_DSM.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_DSM.CPP 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/LOAD_DSM.CPP 2009-08-20 20:43:52 UTC (rev 336) @@ -110,10 +110,8 @@ m_nDefaultGlobalVolume = psong->globalvol << 2; if ((!m_nDefaultGlobalVolume) || (m_nDefaultGlobalVolume > 256)) m_nDefaultGlobalVolume = 256; m_nSamplePreAmp = psong->mastervol & 0x7F; - for (UINT iOrd=0; iOrd<MAX_ORDERS; iOrd++) - { - Order[iOrd] = (BYTE)((iOrd < psong->numord) ? psong->orders[iOrd] : 0xFF); - } + Order.ReadAsByte(psong->orders, psong->numord, sizeof(psong->orders)); + for (UINT iPan=0; iPan<16; iPan++) { ChnSettings[iPan].nPan = 0x80; Modified: trunk/OpenMPT/soundlib/Load_ams.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_ams.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_ams.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -103,8 +103,12 @@ for (UINT cNam=0; cNam<m_nChannels; cNam++) { if (dwMemPos + 32 >= dwMemLength) return true; - tmp = lpStream[dwMemPos++]; - dwMemPos += tmp; + BYTE chnnamlen = lpStream[dwMemPos++]; + if ((chnnamlen) && (chnnamlen < MAX_CHANNELNAME)) + { + memcpy(ChnSettings[cNam].szName, lpStream + dwMemPos + 1, chnnamlen); + } + dwMemPos += chnnamlen; } // Read Pattern Names m_lpszPatternNames = new char[pfh->patterns * 32]; @@ -132,10 +136,10 @@ dwMemPos += tmp; } // Read Order List - for (UINT iOrd=0; iOrd<pfh->orders; iOrd++, dwMemPos += 2) + Order.resize(pfh->orders, Order.GetInvalidPatIndex()); + for (UINT iOrd=0; iOrd < pfh->orders; iOrd++, dwMemPos += 2) { - UINT n = *((WORD *)(lpStream+dwMemPos)); - Order[iOrd] = n; + Order[iOrd] = (PATTERNINDEX)*((WORD *)(lpStream + dwMemPos)); } // Read Patterns for (UINT iPat=0; iPat<pfh->patterns; iPat++) @@ -459,15 +463,12 @@ } // Order List { - for (UINT i=0; i<MAX_ORDERS; i++) + if ((dwMemPos + 2 * psh->orders) >= dwMemLength) return TRUE; + Order.resize(psh->orders, Order.GetInvalidPatIndex()); + for (UINT iOrd = 0; iOrd < psh->orders; iOrd++) { - Order[i] = Order.GetInvalidPatIndex(); - if (dwMemPos + 2 >= dwMemLength) return TRUE; - if (i < psh->orders) - { - Order[i] = lpStream[dwMemPos]; - dwMemPos += 2; - } + Order[iOrd] = (PATTERNINDEX)*((WORD *)(lpStream + dwMemPos)); + dwMemPos += 2; } } // Pattern Data Modified: trunk/OpenMPT/soundlib/Load_far.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_far.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_far.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -114,10 +114,8 @@ pmh2 = &farHeader2; dwMemPos += sizeof(FARHEADER2); if (dwMemPos >= dwMemLength) return true; - for (UINT iorder=0; iorder<MAX_ORDERS; iorder++) - { - Order[iorder] = (iorder <= pmh2->snglen) ? pmh2->orders[iorder] : Order.GetInvalidPatIndex(); - } + + Order.ReadAsByte(pmh2->orders, pmh2->snglen, sizeof(pmh2->orders)); m_nRestartPos = pmh2->loopto; // Reading Patterns dwMemPos += headerlen - (869 + pmh1->stlen); Modified: trunk/OpenMPT/soundlib/Load_imf.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_imf.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_imf.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -329,8 +329,9 @@ } if(!m_nChannels) return false; + Order.resize(hdr.ordnum); for (ORDERINDEX nOrd = 0; nOrd < hdr.ordnum; nOrd++) - Order[nOrd] = ((hdr.orderlist[nOrd] == 0xff) ? Order.GetIgnoreIndex() : hdr.orderlist[nOrd]); + Order[nOrd] = ((hdr.orderlist[nOrd] == 0xff) ? Order.GetIgnoreIndex() : (PATTERNINDEX)hdr.orderlist[nOrd]); // read patterns for (PATTERNINDEX nPat = 0; nPat < hdr.patnum; nPat++) Modified: trunk/OpenMPT/soundlib/Load_mdl.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mdl.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_mdl.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -245,7 +245,7 @@ else m_nChannels = i+1; } - for (j=0; j<norders; j++) Order[j] = pmib->seq[j]; + Order.ReadAsByte(pmib->seq, norders, sizeof(pmib->seq)); break; // ME: song message case 0x454D: Modified: trunk/OpenMPT/soundlib/Load_med.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_med.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -670,19 +670,20 @@ UINT n = BigEndianW(pmps->length); if (pseq+n <= dwMemLength) { + Order.resize(nOrders++); for (UINT i=0; i<n; i++) { - UINT seqval = pmps->seq[i] >> 8; + WORD seqval = BigEndian(pmps->seq[i]); if ((seqval < wNumBlocks) && (nOrders < MAX_ORDERS-1)) { - Order[nOrders++] = seqval; + Order[nOrders++] = (ORDERINDEX)seqval; } } } } } playtransp = pmsh2->playtransp; - while (nOrders < MAX_ORDERS) Order[nOrders++] = 0xFF; + while (nOrders < MAX_ORDERS) Order[nOrders++] = Order.GetInvalidPatIndex(); } // Reading Expansion structure if (pmex) Modified: trunk/OpenMPT/soundlib/Load_mid.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mid.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_mid.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -563,7 +563,7 @@ Log("%d tracks, tempo = %dus, division = %04X TickFactor=%d\n", tracks, nTempoUsec, ((UINT)division) & 0xFFFF, nTickMultiplier); #endif // Initializing - Order.assign(Order.size(), Order.GetInvalidPatIndex()); + Order.resize(MAX_ORDERS, Order.GetInvalidPatIndex()); memset(chnstate, 0, sizeof(chnstate)); memset(miditracks, 0, sizeof(miditracks)); memset(midichstate, 0, sizeof(midichstate)); Modified: trunk/OpenMPT/soundlib/Load_mod.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_mod.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -291,7 +291,6 @@ pMagic = (PMODMAGIC)(lpStream+dwMemPos); dwMemPos += sizeof(MODMAGIC); if (m_nSamples == 15) dwMemPos -= 4; - Order.assign(Order.size(), 0); Order.ReadAsByte(pMagic->Orders, 128, 128); UINT nbp, nbpbuggy, nbpbuggy2, norders; @@ -315,7 +314,7 @@ } if (i >= nbpbuggy2) nbpbuggy2 = i+1; } - for (UINT iend=norders; iend<MAX_ORDERS; iend++) Order[iend] = Order.GetInvalidPatIndex(); + for (UINT iend = norders; iend < 0x80; iend++) Order[iend] = Order.GetInvalidPatIndex(); norders--; m_nRestartPos = pMagic->nRestartPos; if (m_nRestartPos >= 0x78) m_nRestartPos = 0; Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mt2.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -204,9 +204,10 @@ { m_nDefaultTempo = 110250 / pfh->wSamplesPerTick; } - for (UINT iOrd=0; iOrd<MAX_ORDERS; iOrd++) + Order.resize(pfh->nOrders, Order.GetInvalidPatIndex()); + for (UINT iOrd=0; iOrd < pfh->nOrders; iOrd++) { - Order[iOrd] = (BYTE)((iOrd < pfh->nOrders) ? pfh->Orders[iOrd] : 0xFF); + Order[iOrd] = (PATTERNINDEX)pfh->Orders[iOrd]; } memcpy(m_szNames[0], pfh->szSongName, 32); m_szNames[0][31] = 0; Modified: trunk/OpenMPT/soundlib/Load_okt.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_okt.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_okt.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -107,6 +107,7 @@ { UINT orderlen = norders; if (orderlen >= MAX_ORDERS) orderlen = MAX_ORDERS-1; + Order.resize(orderlen); for (UINT i=0; i<orderlen; i++) Order[i] = lpStream[dwMemPos+10+i]; for (UINT j=orderlen; j>1; j--) { if (Order[j-1]) break; Order[j-1] = 0xFF; } dwMemPos += BigEndian(*((DWORD *)(lpStream + dwMemPos + 4))) + 8; Modified: trunk/OpenMPT/soundlib/Load_psm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_psm.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_psm.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -15,8 +15,8 @@ //#define PSM_LOG -#define PSM_ID_NEW 0x204d5350 -#define PSM_ID_OLD 0xfe4d5350 +#define PSM_ID_NEW 0x204d5350 // "PSM " +#define PSM_ID_OLD 0xfe4d5350 // "PSM\xFE" #define IFFID_FILE 0x454c4946 #define IFFID_TITL 0x4c544954 #define IFFID_SDFT 0x54464453 @@ -226,6 +226,7 @@ } } UINT iOrd = 0; + Order.resize(MAX_ORDERS, Order.GetInvalidPatIndex()); while ((pos+5<len) && (iOrd < MAX_ORDERS)) { DWORD dwName = *(DWORD *)(pdata+pos); Modified: trunk/OpenMPT/soundlib/Load_wav.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_wav.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Load_wav.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -50,8 +50,8 @@ m_nDefaultSpeed = 8; m_nDefaultTempo = 125; m_dwSongFlags |= SONG_LINEARSLIDES; // For no resampling + Order.resize(MAX_ORDERS, Order.GetInvalidPatIndex()); Order[0] = 0; - Order[1] = 0xFF; bool fail = Patterns.Insert(0, 64); fail = Patterns.Insert(1, 64); if(fail) return true; Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2009-08-20 16:46:12 UTC (rev 335) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2009-08-20 20:43:52 UTC (rev 336) @@ -508,7 +508,8 @@ memset(ChnMix, 0, sizeof(ChnMix)); memset(Chn, 0, sizeof(Chn)); memset(Instruments, 0, sizeof(Instruments)); - Order.assign(MAX_ORDERS, Order.GetInvalidPatIndex()); + //Order.assign(MAX_ORDERS, Order.GetInvalidPatIndex()); + Order.resize(1, Order.GetInvalidPatIndex()); Patterns.ClearPatterns(); memset(m_szNames, 0, sizeof(m_szNames)); memset(m_MixPlugins, 0, sizeof(m_MixPlugins)); @@ -706,7 +707,7 @@ if ((m_nRestartPos >= Order.size()) || (Order[m_nRestartPos] >= Patterns.Size())) m_nRestartPos = 0; // Load plugins only when m_pModDoc != 0. (can be == 0 for example when examining module samples in treeview. - CString sNotFound; + string sNotFound; bool bSearchIDs[MAX_MIXPLUGINS] = {false}; UINT iShowNotFound = 0; @@ -757,7 +758,7 @@ sNotFound = "The following plugins have not been found:\n\n" + sNotFound + "\nDo you want to search for them on KVRAudio?" "\nWARNING: A browser window / tab is opened for every plugin. If you do not want that, you can visit http://www.kvraudio.com/search.php"; } - if (::MessageBox(0, sNotFound, "OpenMPT - Plugins missing", MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION) == IDYES) + if (::MessageBox(0, sNotFound.c_str(), "OpenMPT - Plugins missing", MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION) == IDYES) for (UINT iPlug = 0; iPlug < MAX_MIXPLUGINS; iPlug++) if (bSearchIDs[iPlug] == true) { @@ -774,6 +775,7 @@ if (m_nType) { SetModSpecsPointer(m_pModSpecs, m_nType); + Order.resize(GetModSpecifications().ordersMax, Order.GetInvalidPatIndex()); return TRUE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |