diff options
Diffstat (limited to 'xbmc/filesystem/RarFile.cpp')
-rw-r--r-- | xbmc/filesystem/RarFile.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/xbmc/filesystem/RarFile.cpp b/xbmc/filesystem/RarFile.cpp index 37e70e0726..d88a724638 100644 --- a/xbmc/filesystem/RarFile.cpp +++ b/xbmc/filesystem/RarFile.cpp @@ -43,7 +43,11 @@ using namespace std; #define SEEKTIMOUT 30000 #ifdef HAS_FILESYSTEM_RAR -CRarFileExtractThread::CRarFileExtractThread() : CThread("RarFileExtract"), hRunning(true), hQuit(true) +CRarFileExtractThread::CRarFileExtractThread() + : CThread("RarFileExtract") + , hRunning(true) + , hQuit(true) + , m_iSize(0) { m_pArc = NULL; m_pCmd = NULL; @@ -130,6 +134,9 @@ CRarFile::CRarFile() m_bUseFile = false; m_bOpen = false; m_bSeekable = true; + m_iFilePosition = 0; + m_iFileSize = 0; + m_iBufferStart = 0; } CRarFile::~CRarFile() @@ -550,7 +557,7 @@ void CRarFile::InitFromUrl(const CURL& url) m_bFileOptions = 0; - for( vector<std::string>::iterator it = options.begin();it != options.end(); it++) + for( vector<std::string>::iterator it = options.begin();it != options.end(); ++it) { size_t iEqual = (*it).find('='); if(iEqual != std::string::npos) @@ -645,11 +652,10 @@ bool CRarFile::OpenInArchive() AddEndSlash(m_pCmd->ExtrPath); // Set password for encrypted archives - if ((m_strPassword.size() > 0) && - (m_strPassword.size() < sizeof (m_pCmd->Password))) - { - strcpy(m_pCmd->Password, m_strPassword.c_str()); - } + if (m_strPassword.length() > MAXPASSWORD - 1) + CLog::Log(LOGWARNING,"OpenInArchive: Supplied password is too long %d", (int) m_strPassword.length()); + strncpy(m_pCmd->Password, m_strPassword.c_str(), sizeof (m_pCmd->Password) - 1); + m_pCmd->Password[sizeof (m_pCmd->Password) - 1] = 0; m_pCmd->ParseDone(); |