Kaydet (Commit) 4e6df6de authored tarafından Caolán McNamara's avatar Caolán McNamara

recursion protection

Change-Id: I66fda143ba1f0fa6f2638a8bd4936c75a6c40980
üst 9d3adaaa
......@@ -645,7 +645,7 @@ void LwpCellLayout::ApplyProtect(XFCell * pCell, LwpObjectID aTableID)
{
bool bProtected = false;
// judge current cell
if (IsProtected())
if (GetIsProtected())
{
bProtected = true;
}
......@@ -653,7 +653,7 @@ void LwpCellLayout::ApplyProtect(XFCell * pCell, LwpObjectID aTableID)
{
// judge base on
LwpCellLayout * pBase = dynamic_cast<LwpCellLayout *>(GetBasedOnStyle().get());
if (pBase && pBase->IsProtected())
if (pBase && pBase->GetIsProtected())
{
bProtected = true;
}
......@@ -663,7 +663,7 @@ void LwpCellLayout::ApplyProtect(XFCell * pCell, LwpObjectID aTableID)
LwpTable * pTable = dynamic_cast<LwpTable *>(aTableID.obj().get());
LwpTableLayout * pTableLayout = pTable ? dynamic_cast<LwpTableLayout *>(pTable->GetTableLayout()) : nullptr;
LwpSuperTableLayout * pSuper = pTableLayout ? pTableLayout->GetSuperTableLayout() : nullptr;
if (pSuper && pSuper->IsProtected())
if (pSuper && pSuper->GetIsProtected())
{
bProtected = true;
}
......
......@@ -397,7 +397,7 @@ void LwpFrame::ApplyBackColor(XFFrameStyle* pFrameStyle)
*/
void LwpFrame::ApplyProtect(XFFrameStyle* pFrameStyle)
{
if(m_pLayout->IsProtected())
if(m_pLayout->GetIsProtected())
{
pFrameStyle->SetProtect(true,true,true);
}
......
......@@ -74,6 +74,8 @@
LwpVirtualLayout::LwpVirtualLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm)
: LwpDLNFPVList(objHdr, pStrm)
, m_bGettingHonorProtection(false)
, m_bGettingHasProtection(false)
, m_bGettingIsProtected(false)
, m_nAttributes(0)
, m_nAttributes2(0)
, m_nAttributes3(0)
......@@ -1267,7 +1269,7 @@ bool LwpMiddleLayout::IsProtected()
}
else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> (GetBasedOnStyle().get()))
{
bProtected = pLay->IsProtected();
bProtected = pLay->GetIsProtected();
}
else
bProtected = LwpVirtualLayout::IsProtected();
......@@ -1276,7 +1278,7 @@ bool LwpMiddleLayout::IsProtected()
if(pParent && !pParent->IsHeader())
{
/* If a parent's protected then none of its children can be accessed. */
if(pParent->IsProtected())
if(pParent->GetIsProtected())
return true;
if(pParent->GetHonorProtection())
......
......@@ -120,7 +120,15 @@ public:
m_bGettingHonorProtection = false;
return bRet;
}
virtual bool IsProtected();
bool GetIsProtected()
{
if (m_bGettingIsProtected)
throw std::runtime_error("recursion in layout");
m_bGettingIsProtected = true;
bool bRet = IsProtected();
m_bGettingIsProtected = false;
return bRet;
}
bool GetHasProtection()
{
if (m_bGettingHasProtection)
......@@ -181,9 +189,11 @@ protected:
void Read() override;
bool HasProtection();
virtual bool HonorProtection();
virtual bool IsProtected();
protected:
bool m_bGettingHonorProtection;
bool m_bGettingHasProtection;
bool m_bGettingIsProtected;
sal_uInt32 m_nAttributes;
sal_uInt32 m_nAttributes2;
sal_uInt32 m_nAttributes3;
......
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