Kaydet (Commit) 6e403346 authored tarafından Laurent Godard's avatar Laurent Godard Kaydeden (comit) Caolán McNamara

null pointer guard if no user defined types declared at the module level

Change-Id: I368a168c636e4029e9cd9bbe4a4df5d9b846c923
Reviewed-on: https://gerrit.libreoffice.org/17834Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst b28a2cb6
...@@ -443,79 +443,82 @@ bool SbiImage::Save( SvStream& r, sal_uInt32 nVer ) ...@@ -443,79 +443,82 @@ bool SbiImage::Save( SvStream& r, sal_uInt32 nVer )
SbiCloseRecord( r, nPos ); SbiCloseRecord( r, nPos );
} }
// User defined types // User defined types
sal_uInt16 nTypes = rTypes->Count(); if (rTypes)
if (nTypes > 0 )
{ {
nPos = SbiOpenRecord( r, B_SBXOBJECTS, nTypes ); sal_uInt16 nTypes = rTypes->Count();
if (nTypes > 0 )
for (sal_uInt16 i = 0; i < nTypes; i++)
{ {
SbxObject* pType = static_cast< SbxObject* > ( rTypes->Get(i) ); nPos = SbiOpenRecord( r, B_SBXOBJECTS, nTypes );
OUString aTypeName = pType->GetClassName();
r.WriteUniOrByteString( aTypeName, eCharSet ); for (sal_uInt16 i = 0; i < nTypes; i++)
{
SbxObject* pType = static_cast< SbxObject* > ( rTypes->Get(i) );
OUString aTypeName = pType->GetClassName();
SbxArray *pTypeMembers = pType->GetProperties(); r.WriteUniOrByteString( aTypeName, eCharSet );
sal_uInt16 nTypeMembers = pTypeMembers->Count();
r.WriteInt16(nTypeMembers); SbxArray *pTypeMembers = pType->GetProperties();
sal_uInt16 nTypeMembers = pTypeMembers->Count();
for (sal_uInt16 j = 0; j < nTypeMembers; j++) r.WriteInt16(nTypeMembers);
{
SbxProperty* pTypeElem = static_cast< SbxProperty* > ( pTypeMembers->Get(j) ); for (sal_uInt16 j = 0; j < nTypeMembers; j++)
{
OUString aElemName = pTypeElem->GetName(); SbxProperty* pTypeElem = static_cast< SbxProperty* > ( pTypeMembers->Get(j) );
r.WriteUniOrByteString( aElemName, eCharSet );
SbxDataType dataType = pTypeElem->GetType(); OUString aElemName = pTypeElem->GetName();
r.WriteInt16(dataType); r.WriteUniOrByteString( aElemName, eCharSet );
SbxFlagBits nElemFlags = pTypeElem->GetFlags(); SbxDataType dataType = pTypeElem->GetType();
r.WriteUInt32(static_cast< sal_uInt32 > (nElemFlags) ); r.WriteInt16(dataType);
SbxBase* pElemObject = pTypeElem->GetObject(); SbxFlagBits nElemFlags = pTypeElem->GetFlags();
r.WriteUInt32(static_cast< sal_uInt32 > (nElemFlags) );
if (pElemObject) SbxBase* pElemObject = pTypeElem->GetObject();
{
r.WriteInt16(1); // has elem Object
if( dataType == SbxOBJECT ) if (pElemObject)
{ {
// nested user defined types r.WriteInt16(1); // has elem Object
// declared before use, so it is ok to reference it by name on load
SbxObject* pNestedType = static_cast< SbxObject* > ( pElemObject );
r.WriteUniOrByteString( pNestedType->GetClassName(), eCharSet );
}
else
{
// an array
SbxDimArray* pArray = static_cast< SbxDimArray* > ( pElemObject );
bool bFixedSize = pArray->hasFixedSize(); if( dataType == SbxOBJECT )
if (bFixedSize) {
r.WriteInt16(1); // nested user defined types
// declared before use, so it is ok to reference it by name on load
SbxObject* pNestedType = static_cast< SbxObject* > ( pElemObject );
r.WriteUniOrByteString( pNestedType->GetClassName(), eCharSet );
}
else else
r.WriteInt16(0); {
// an array
SbxDimArray* pArray = static_cast< SbxDimArray* > ( pElemObject );
sal_Int32 nDims = pArray->GetDims(); bool bFixedSize = pArray->hasFixedSize();
r.WriteInt32(nDims); if (bFixedSize)
r.WriteInt16(1);
else
r.WriteInt16(0);
for (sal_Int32 d = 0; d < nDims; d++) sal_Int32 nDims = pArray->GetDims();
{ r.WriteInt32(nDims);
sal_Int32 lBound;
sal_Int32 uBound; for (sal_Int32 d = 0; d < nDims; d++)
pArray->GetDim32(d, lBound, uBound); {
r.WriteInt32(lBound).WriteInt32(uBound); sal_Int32 lBound;
sal_Int32 uBound;
pArray->GetDim32(d, lBound, uBound);
r.WriteInt32(lBound).WriteInt32(uBound);
}
} }
} }
} else
else r.WriteInt16(0); // no elem Object
r.WriteInt16(0); // no elem Object
}
} }
SbiCloseRecord( r, nPos );
} }
SbiCloseRecord( r, nPos );
} }
// Set overall length // Set overall length
SbiCloseRecord( r, nStart ); SbiCloseRecord( r, nStart );
......
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