@ -221,12 +221,13 @@ BOOL CSoundFile::ReadIT(const BYTE *lpStream, DWORD dwMemLength)
// Reading Song Message
if ( ( pifh . special & 0x01 ) & & ( pifh . msglength ) & & ( pifh . msglength < = dwMemLength ) & & ( pifh . msgoffset < dwMemLength - pifh . msglength ) )
{
m_lpszSongComments = new char [ pifh . msglength + 1 ] ;
if ( m_lpszSongComments )
{
memcpy ( m_lpszSongComments , lpStream + pifh . msgoffset , pifh . msglength ) ;
try {
m_lpszSongComments = new char [ pifh . msglength + 1 ] ;
memcpy ( m_lpszSongComments , lpStream + pifh . msgoffset , pifh . msglength ) ;
m_lpszSongComments [ pifh . msglength ] = 0 ;
}
catch ( std : : bad_alloc & ba ) {
}
}
// Reading orders
UINT nordsize = pifh . ordnum ;
@ -289,12 +290,14 @@ BOOL CSoundFile::ReadIT(const BYTE *lpStream, DWORD dwMemLength)
dwMemPos + = 8 ;
if ( ( dwMemPos + len < = dwMemLength ) & & ( len < = MAX_PATTERNS * MAX_PATTERNNAME ) & & ( len > = MAX_PATTERNNAME ) )
{
m_lpszPatternNames = new char [ len ] ;
if ( m_lpszPatternNames )
{
try {
m_lpszPatternNames = new char [ len ] ;
m_nPatternNames = len / MAX_PATTERNNAME ;
memcpy ( m_lpszPatternNames , lpStream + dwMemPos , len ) ;
memcpy ( m_lpszPatternNames , lpStream + dwMemPos , len ) ;
}
catch ( std : : bad_alloc & ba ) {
}
dwMemPos + = len ;
}
}
@ -376,8 +379,14 @@ BOOL CSoundFile::ReadIT(const BYTE *lpStream, DWORD dwMemLength)
{
if ( ( inspos [ nins ] > 0 ) & & ( inspos [ nins ] < dwMemLength - sizeof ( ITOLDINSTRUMENT ) ) )
{
INSTRUMENTHEADER * penv = new INSTRUMENTHEADER ;
if ( ! penv ) continue ;
INSTRUMENTHEADER * penv ;
try {
penv = new INSTRUMENTHEADER ;
}
catch ( std : : bad_alloc & ba ) {
continue ;
}
Headers [ nins + 1 ] = penv ;
memset ( penv , 0 , sizeof ( INSTRUMENTHEADER ) ) ;
ITInstrToMPT ( lpStream + inspos [ nins ] , penv , pifh . cmwt ) ;