summaryrefslogtreecommitdiffstats
path: root/sal
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2018-10-20 23:57:26 +0200
committerMike Kaganski <mike.kaganski@collabora.com>2018-10-21 09:42:16 +0200
commit5e8cd8683d345b75297994b3f7aab851835eb124 (patch)
tree34479c138f9f59a4ff45e194ab93531c43406797 /sal
parenttdf#120703 (PVS): 920d4463f6e59b815852c173e2974ffc7b4bb284 follow-up (diff)
downloadcore-5e8cd8683d345b75297994b3f7aab851835eb124.tar.gz
core-5e8cd8683d345b75297994b3f7aab851835eb124.zip
tdf#120703 (PVS): handle failed calloc/realloc
V522 There might be dereferencing of a potential null pointer 'pProfile'. Check lines: 215, 213. V522 There might be dereferencing of a potential null pointer 'pFile'. Check lines: 1081, 1068. V701 realloc() possible leak: when realloc() fails in allocating memory, original pointer 'pProfile->m_Lines' is lost. Consider assigning realloc() to a temporary pointer. V522 There might be dereferencing of a potential null pointer 'pProfile->m_Lines'. Check lines: 1328, 1324. V701 realloc() possible leak: when realloc() fails in allocating memory, original pointer 'pProfile->m_Lines' is lost. Consider assigning realloc() to a temporary pointer. V522 There might be dereferencing of a potential null pointer 'pProfile->m_Lines'. Check lines: 1365, 1362. V701 realloc() possible leak: when realloc() fails in allocating memory, original pointer 'pSection->m_Entries' is lost. Consider assigning realloc() to a temporary pointer. V701 realloc() possible leak: when realloc() fails in allocating memory, original pointer 'pProfile->m_Sections' is lost. Consider assigning realloc() to a temporary pointer. V522 There might be dereferencing of a potential null pointer 'pProfile->m_Sections'. Check lines: 1540, 1536. Change-Id: Ib6c2c79c372120268f6101f639a3ed085534cca0 Reviewed-on: https://gerrit.libreoffice.org/62116 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'sal')
-rw-r--r--sal/osl/w32/profile.cxx61
1 files changed, 47 insertions, 14 deletions
diff --git a/sal/osl/w32/profile.cxx b/sal/osl/w32/profile.cxx
index 63e172ed7553..ccf96ff35e03 100644
--- a/sal/osl/w32/profile.cxx
+++ b/sal/osl/w32/profile.cxx
@@ -211,6 +211,8 @@ oslProfile SAL_CALL osl_openProfile(rtl_uString *strProfileName, sal_uInt32 Flag
}
pProfile = static_cast<osl_TProfileImpl*>(calloc(1, sizeof(osl_TProfileImpl)));
+ if (!pProfile)
+ return nullptr;
pProfile->m_Flags = Flags & FLG_USER;
osl_getSystemPathFromFileURL(strProfileName, &pProfile->m_strFileName);
@@ -1066,6 +1068,8 @@ static bool lockFile(const osl_TFile* pFile, osl_TLockMode eMode)
static osl_TFile* openFileImpl(rtl_uString * strFileName, oslProfileOption ProfileFlags )
{
osl_TFile* pFile = static_cast< osl_TFile*>( calloc( 1, sizeof(osl_TFile) ) );
+ if (!pFile)
+ return nullptr;
bool bWriteable = false;
if ( ProfileFlags & ( osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ) )
@@ -1321,11 +1325,19 @@ static const sal_Char* addLine(osl_TProfileImpl* pProfile, const sal_Char* Line)
unsigned int oldmax=pProfile->m_MaxLines;
pProfile->m_MaxLines += LINES_ADD;
- pProfile->m_Lines = static_cast<sal_Char **>(realloc(pProfile->m_Lines, pProfile->m_MaxLines * sizeof(sal_Char *)));
+ if (auto p = static_cast<sal_Char **>(realloc(pProfile->m_Lines, pProfile->m_MaxLines * sizeof(sal_Char *))))
+ {
+ pProfile->m_Lines = p;
- for ( index = oldmax ; index < pProfile->m_MaxLines ; ++index )
+ for ( index = oldmax ; index < pProfile->m_MaxLines ; ++index )
+ {
+ pProfile->m_Lines[index]=nullptr;
+ }
+ }
+ else
{
- pProfile->m_Lines[index]=nullptr;
+ free(pProfile->m_Lines);
+ pProfile->m_Lines = nullptr;
}
}
@@ -1359,12 +1371,19 @@ static const sal_Char* insertLine(osl_TProfileImpl* pProfile, const sal_Char* Li
else
{
pProfile->m_MaxLines += LINES_ADD;
- pProfile->m_Lines = static_cast<sal_Char **>(realloc(pProfile->m_Lines,
- pProfile->m_MaxLines * sizeof(sal_Char *)));
+ if (auto p = static_cast<sal_Char**>(
+ realloc(pProfile->m_Lines, pProfile->m_MaxLines * sizeof(sal_Char*))))
+ {
+ pProfile->m_Lines = p;
- memset(&pProfile->m_Lines[pProfile->m_NoLines],
- 0,
- (pProfile->m_MaxLines - pProfile->m_NoLines - 1) * sizeof(sal_Char*));
+ memset(&pProfile->m_Lines[pProfile->m_NoLines], 0,
+ (pProfile->m_MaxLines - pProfile->m_NoLines - 1) * sizeof(sal_Char*));
+ }
+ else
+ {
+ free(pProfile->m_Lines);
+ pProfile->m_Lines = nullptr;
+ }
}
if (pProfile->m_Lines == nullptr)
@@ -1474,8 +1493,14 @@ static bool addEntry(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection,
else
{
pSection->m_MaxEntries += ENTRIES_ADD;
- pSection->m_Entries = static_cast<osl_TProfileEntry *>(realloc(pSection->m_Entries,
- pSection->m_MaxEntries * sizeof(osl_TProfileEntry)));
+ if (auto p = static_cast<osl_TProfileEntry*>(realloc(
+ pSection->m_Entries, pSection->m_MaxEntries * sizeof(osl_TProfileEntry))))
+ pSection->m_Entries = p;
+ else
+ {
+ free(pSection->m_Entries);
+ pSection->m_Entries = nullptr;
+ }
}
if (pSection->m_Entries == nullptr)
@@ -1533,11 +1558,19 @@ static bool addSection(osl_TProfileImpl* pProfile, int Line, const sal_Char* Sec
unsigned int oldmax=pProfile->m_MaxSections;
pProfile->m_MaxSections += SECTIONS_ADD;
- pProfile->m_Sections = static_cast<osl_TProfileSection*>(realloc(pProfile->m_Sections,
- pProfile->m_MaxSections * sizeof(osl_TProfileSection)));
- for ( index = oldmax ; index < pProfile->m_MaxSections ; ++index )
+ if (auto p = static_cast<osl_TProfileSection*>(realloc(
+ pProfile->m_Sections, pProfile->m_MaxSections * sizeof(osl_TProfileSection))))
+ {
+ pProfile->m_Sections = p;
+ for ( index = oldmax ; index < pProfile->m_MaxSections ; ++index )
+ {
+ pProfile->m_Sections[index].m_Entries=nullptr;
+ }
+ }
+ else
{
- pProfile->m_Sections[index].m_Entries=nullptr;
+ free(pProfile->m_Sections);
+ pProfile->m_Sections = nullptr;
}
}