From 954b1721e6ac82b2ce4c0a1a48083e8ab6c00d49 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Thu, 5 May 2005 00:17:19 +0000 Subject: [PATCH] add missing copy ctor (fixes potential crash; reproduced in a test case but may not actually manifest anywhere) --- stepmania/src/RageFileBasic.cpp | 22 ++++++++++++++++++++++ stepmania/src/RageFileBasic.h | 1 + 2 files changed, 23 insertions(+) diff --git a/stepmania/src/RageFileBasic.cpp b/stepmania/src/RageFileBasic.cpp index f0a7657247..600ae547e4 100644 --- a/stepmania/src/RageFileBasic.cpp +++ b/stepmania/src/RageFileBasic.cpp @@ -15,6 +15,28 @@ RageFileObj::RageFileObj() m_iCRC32 = 0; } +RageFileObj::RageFileObj( const RageFileObj &cpy ): + RageFileBasic(cpy) +{ + /* If the original file has a buffer, copy it. */ + if( cpy.m_pBuffer != NULL ) + { + m_pBuffer = new char[BSIZE]; + memcpy( m_pBuffer, cpy.m_pBuffer, BSIZE ); + + int iOffsetIntoBuffer = cpy.m_pBuf - cpy.m_pBuffer; + m_pBuf = m_pBuffer + iOffsetIntoBuffer; + } + else + m_pBuffer = NULL; + + m_iBufAvail = cpy.m_iBufAvail; + m_bEOF = cpy.m_bEOF; + m_iFilePos = cpy.m_iFilePos; + m_bCRC32Enabled = cpy.m_bCRC32Enabled; + m_iCRC32 = cpy.m_iCRC32; +} + RageFileObj::~RageFileObj() { delete [] m_pBuffer; diff --git a/stepmania/src/RageFileBasic.h b/stepmania/src/RageFileBasic.h index 005be32b45..6be5ae6090 100644 --- a/stepmania/src/RageFileBasic.h +++ b/stepmania/src/RageFileBasic.h @@ -59,6 +59,7 @@ class RageFileObj: public RageFileBasic { public: RageFileObj(); + RageFileObj( const RageFileObj &cpy ); virtual ~RageFileObj(); virtual CString GetError() const { return m_sError; }