aboutsummaryrefslogtreecommitdiff
path: root/xbmc/filesystem/RarFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/filesystem/RarFile.cpp')
-rw-r--r--xbmc/filesystem/RarFile.cpp20
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();