diff --git a/third_party/libmodplug/src/sndfile.cpp b/third_party/libmodplug/src/sndfile.cpp index 7e4096f..0deede9 100644 --- a/third_party/libmodplug/src/sndfile.cpp +++ b/third_party/libmodplug/src/sndfile.cpp @@ -339,8 +339,13 @@ BOOL CSoundFile::Destroy() MODCOMMAND *CSoundFile::AllocatePattern(UINT rows, UINT nchns) //------------------------------------------------------------ { - MODCOMMAND *p = new MODCOMMAND[rows*nchns]; - if (p) memset(p, 0, rows*nchns*sizeof(MODCOMMAND)); + try { + MODCOMMAND *p = new MODCOMMAND[rows*nchns]; + memset(p, 0, rows*nchns*sizeof(MODCOMMAND)); + } + catch (std::bad_alloc& ba) { + } + return p; } @@ -1777,8 +1782,15 @@ BOOL CSoundFile::SetPatternName(UINT nPat, LPCSTR lpszName) { if (!lpszName[0]) return TRUE; UINT len = (nPat+1)*MAX_PATTERNNAME; - char *p = new char[len]; - if (!p) return FALSE; + + char *p; + try { + p = new char[len]; + } + catch (std::bad_alloc& ba) { + return FALSE; + } + memset(p, 0, len); if (m_lpszPatternNames) { diff --git a/third_party/libmodplug/src/sndfile.h b/third_party/libmodplug/src/sndfile.h index c009265..84592ca 100644 --- a/third_party/libmodplug/src/sndfile.h +++ b/third_party/libmodplug/src/sndfile.h @@ -13,6 +13,8 @@ #ifndef __SNDFILE_H #define __SNDFILE_H +#include + #ifdef UNDER_CE int _strnicmp(const char *str1,const char *str2, int n); #endif