Kaydet (Commit) f7d9f59b authored tarafından Michael Stahl's avatar Michael Stahl Kaydeden (comit) Andras Timar

filter: fix DrMemory/valgrind warnings in PPT paragraph import

various uninitialized variables in CppunitTest_sd_filters_test hang-8.ppt

Change-Id: Id0b9f146a7ab8b5bb2b36a5c2a39d65ee52e122d
(cherry picked from commit 78407eea)
Reviewed-on: https://gerrit.libreoffice.org/20157Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
(cherry picked from commit d130afe6)
üst 8519e23a
...@@ -4934,82 +4934,179 @@ void PPTStyleTextPropReader::ReadParaProps( SvStream& rIn, const DffRecordHeader ...@@ -4934,82 +4934,179 @@ void PPTStyleTextPropReader::ReadParaProps( SvStream& rIn, const DffRecordHeader
aSet.mpArry[ PPT_ParaAttr_BuHardFont ] = ( nBulFlg & 2 ) ? 1 : 0; aSet.mpArry[ PPT_ParaAttr_BuHardFont ] = ( nBulFlg & 2 ) ? 1 : 0;
aSet.mpArry[ PPT_ParaAttr_BuHardColor ] = ( nBulFlg & 4 ) ? 1 : 0; aSet.mpArry[ PPT_ParaAttr_BuHardColor ] = ( nBulFlg & 4 ) ? 1 : 0;
// NOTE: one might think that the hard-coded numbers here are the
// same as the PPT_ParaAttr_* constants, but it's NOT always true!
if ( nMask & 0x0080 ) // buChar if ( nMask & 0x0080 ) // buChar
{
rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_BulletChar ] ); rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_BulletChar ] );
if (!rIn.good())
{
aSet.mnAttrSet &= ~(1 << PPT_ParaAttr_BulletChar);
}
}
if ( nMask & 0x0010 ) // buTypeface if ( nMask & 0x0010 ) // buTypeface
{
rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_BulletFont ] ); rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_BulletFont ] );
if (!rIn.good())
{
aSet.mnAttrSet &= ~(1 << PPT_ParaAttr_BulletFont);
}
}
if ( nMask & 0x0040 ) // buSize if ( nMask & 0x0040 ) // buSize
{ {
rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_BulletHeight ] ); rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_BulletHeight ] );
if ( ! ( ( nMask & ( 1 << PPT_ParaAttr_BuHardHeight ) ) if (!rIn.good()
&& ( nBulFlg & ( 1 << PPT_ParaAttr_BuHardHeight ) ) ) ) || !((nMask & (1 << PPT_ParaAttr_BuHardHeight))
aSet.mnAttrSet ^= 0x40; && (nBulFlg & (1 << PPT_ParaAttr_BuHardHeight))))
{
aSet.mnAttrSet &= ~(1 << PPT_ParaAttr_BulletHeight);
}
} }
if ( nMask & 0x0020 ) // buColor if ( nMask & 0x0020 ) // buColor
{ {
sal_uInt32 nVal32, nHiByte; sal_uInt32 nVal32, nHiByte;
rIn.ReadUInt32( nVal32 ); rIn.ReadUInt32( nVal32 );
nHiByte = nVal32 >> 24; if (!rIn.good())
if ( nHiByte <= 8 ) {
nVal32 = nHiByte | PPT_COLSCHEME; aSet.mnBulletColor = 0; // no flag for this? default it
aSet.mnBulletColor = nVal32; }
else
{
nHiByte = nVal32 >> 24;
if ( nHiByte <= 8 )
nVal32 = nHiByte | PPT_COLSCHEME;
aSet.mnBulletColor = nVal32;
}
} }
if ( nMask & 0x0800 ) // pfAlignment if ( nMask & 0x0800 ) // pfAlignment
{ {
rIn.ReadUInt16( nDummy16 ); rIn.ReadUInt16( nDummy16 );
aSet.mpArry[ PPT_ParaAttr_Adjust ] = nDummy16 & 3; if (!rIn.good())
{
aSet.mnAttrSet &= ~(1 << PPT_ParaAttr_Adjust);
}
else
{
aSet.mpArry[ PPT_ParaAttr_Adjust ] = nDummy16 & 3;
}
} }
if ( nMask & 0x1000 ) // pfLineSpacing if ( nMask & 0x1000 ) // pfLineSpacing
{
rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_LineFeed ] ); rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_LineFeed ] );
if (!rIn.good())
{
aSet.mnAttrSet &= ~(1 << PPT_ParaAttr_LineFeed);
}
}
if ( nMask & 0x2000 ) // pfSpaceBefore if ( nMask & 0x2000 ) // pfSpaceBefore
{
rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_UpperDist ] ); rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_UpperDist ] );
if (!rIn.good())
{
aSet.mnAttrSet &= ~(1 << PPT_ParaAttr_UpperDist);
}
}
if ( nMask & 0x4000 ) // pfSpaceAfter if ( nMask & 0x4000 ) // pfSpaceAfter
{
rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_LowerDist ] ); rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_LowerDist ] );
if (!rIn.good())
{
aSet.mnAttrSet &= ~(1 << PPT_ParaAttr_LowerDist);
}
}
if ( nMask & 0x100 ) // pfLeftMargin if ( nMask & 0x100 ) // pfLeftMargin
{ {
rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_TextOfs ] ); rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_TextOfs ] );
aSet.mnAttrSet |= 1 << PPT_ParaAttr_TextOfs; if (!rIn.good())
{
aSet.mnAttrSet &= ~(1 << PPT_ParaAttr_TextOfs);
}
else
{
aSet.mnAttrSet |= 1 << PPT_ParaAttr_TextOfs;
}
} }
if ( nMask & 0x400 ) // pfIndent if ( nMask & 0x400 ) // pfIndent
{ {
rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_BulletOfs ] ); rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_BulletOfs ] );
aSet.mnAttrSet |= 1 << PPT_ParaAttr_BulletOfs; if (!rIn.good())
{
aSet.mnAttrSet &= ~(1 << PPT_ParaAttr_BulletOfs);
}
else
{
aSet.mnAttrSet |= 1 << PPT_ParaAttr_BulletOfs;
}
} }
if ( nMask & 0x8000 ) // pfDefaultTabSize if ( nMask & 0x8000 ) // pfDefaultTabSize
{
rIn.ReadUInt16( nDummy16 ); rIn.ReadUInt16( nDummy16 );
if (!rIn.good())
{
// TODO?
}
}
if ( nMask & 0x100000 ) // pfTabStops if ( nMask & 0x100000 ) // pfTabStops
{ {
sal_uInt16 i, nDistance, nAlignment, nNumberOfTabStops = 0; sal_uInt16 i, nDistance, nAlignment, nNumberOfTabStops = 0;
rIn.ReadUInt16( nNumberOfTabStops ); rIn.ReadUInt16( nNumberOfTabStops );
const size_t nMinRecordSize = 4; if (!rIn.good())
const size_t nMaxRecords = rIn.remainingSize() / nMinRecordSize;
if (nNumberOfTabStops > nMaxRecords)
{ {
SAL_WARN("filter.ms", "Parsing error: " << nMaxRecords << // TODO?
" max possible entries, but " << nNumberOfTabStops << " claimed, truncating");
nNumberOfTabStops = nMaxRecords;
} }
for ( i = 0; i < nNumberOfTabStops; i++ ) else
{ {
rIn.ReadUInt16( nDistance ) const size_t nMinRecordSize = 4;
.ReadUInt16( nAlignment ); const size_t nMaxRecords = rIn.remainingSize() / nMinRecordSize;
if (nNumberOfTabStops > nMaxRecords)
{
SAL_WARN("filter.ms", "Parsing error: " << nMaxRecords <<
" max possible entries, but " << nNumberOfTabStops << " claimed, truncating");
nNumberOfTabStops = nMaxRecords;
}
for (i = 0; i < nNumberOfTabStops; ++i)
{
rIn.ReadUInt16( nDistance )
.ReadUInt16( nAlignment );
}
} }
} }
if ( nMask & 0x10000 ) // pfBaseLine if ( nMask & 0x10000 ) // pfBaseLine
{
rIn.ReadUInt16( nDummy16 ); rIn.ReadUInt16( nDummy16 );
if (!rIn.good())
{
// TODO?
}
}
if ( nMask & 0xe0000 ) // pfCharWrap, pfWordWrap, pfOverflow if ( nMask & 0xe0000 ) // pfCharWrap, pfWordWrap, pfOverflow
{ {
rIn.ReadUInt16( nDummy16 ); rIn.ReadUInt16( nDummy16 );
if ( nMask & 0x20000 ) if (!rIn.good())
aSet.mpArry[ PPT_ParaAttr_AsianLB_1 ] = nDummy16 & 1; { // clear flag to avoid invalid access
if ( nMask & 0x40000 ) aSet.mnAttrSet &= ~((1 << PPT_ParaAttr_AsianLB_1)
aSet.mpArry[ PPT_ParaAttr_AsianLB_2 ] = ( nDummy16 >> 1 ) & 1; | (1 << PPT_ParaAttr_AsianLB_2)
if ( nMask & 0x80000 ) | (1 << PPT_ParaAttr_AsianLB_3));
aSet.mpArry[ PPT_ParaAttr_AsianLB_3 ] = ( nDummy16 >> 2 ) & 1; }
aSet.mnAttrSet |= ( ( nMask >> 17 ) & 7 ) << PPT_ParaAttr_AsianLB_1; else
{
if (nMask & 0x20000)
aSet.mpArry[PPT_ParaAttr_AsianLB_1] = nDummy16 & 1;
if (nMask & 0x40000)
aSet.mpArry[PPT_ParaAttr_AsianLB_2] = (nDummy16 >> 1) & 1;
if (nMask & 0x80000)
aSet.mpArry[PPT_ParaAttr_AsianLB_3] = (nDummy16 >> 2) & 1;
aSet.mnAttrSet |= ((nMask >> 17) & 7) << PPT_ParaAttr_AsianLB_1;
}
} }
if ( nMask & 0x200000 ) // pfTextDirection if ( nMask & 0x200000 ) // pfTextDirection
{
rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_BiDi ] ); rIn.ReadUInt16( aSet.mpArry[ PPT_ParaAttr_BiDi ] );
if (!rIn.good())
{ // clear flag to avoid invalid access
aSet.mnAttrSet &= ~(1 << PPT_ParaAttr_BiDi);
}
}
} }
else else
nCharCount = nStringLen; nCharCount = nStringLen;
...@@ -5067,7 +5164,7 @@ void PPTStyleTextPropReader::ReadCharProps( SvStream& rIn, PPTCharPropSet& aChar ...@@ -5067,7 +5164,7 @@ void PPTStyleTextPropReader::ReadCharProps( SvStream& rIn, PPTCharPropSet& aChar
sal_uInt16 nStringLen = aString.getLength(); sal_uInt16 nStringLen = aString.getLength();
rIn.ReadUInt16( nDummy16 ); rIn.ReadUInt16( nDummy16 );
nCharCount = nDummy16; nCharCount = (rIn.good()) ? nDummy16 : 0;
rIn.ReadUInt16( nDummy16 ); rIn.ReadUInt16( nDummy16 );
nCharsToRead = nStringLen - ( nCharAnzRead + nCharCount ); nCharsToRead = nStringLen - ( nCharAnzRead + nCharCount );
if ( nCharsToRead < 0 ) if ( nCharsToRead < 0 )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment