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