summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2022-08-16 12:15:00 +0100
committerCaolán McNamara <caolanm@redhat.com>2022-08-17 09:52:26 +0200
commita30e2862c2bf4635c53a627659905de29934799b (patch)
tree949c130143d69ea7d0c5e54f93250cc24db9f2e8
parentbf237656f829f64805af18a112dda76b4b986429 (diff)
cid#1500382 Dereference before null check
Change-Id: I93f50bf404af29147294a5824dcdd3f12c983758 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138391 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--sw/source/core/inc/frmtool.hxx2
-rw-r--r--sw/source/core/layout/frmtool.cxx37
2 files changed, 19 insertions, 20 deletions
diff --git a/sw/source/core/inc/frmtool.hxx b/sw/source/core/inc/frmtool.hxx
index c7177379a88e..d7c8e8249b7c 100644
--- a/sw/source/core/inc/frmtool.hxx
+++ b/sw/source/core/inc/frmtool.hxx
@@ -310,7 +310,7 @@ class SwBorderAttrs final : public SwCacheObj
const SwAttrSet &m_rAttrSet;
const SvxULSpaceItem &m_rUL;
// #i96772#
- std::shared_ptr<SvxLRSpaceItem> m_rLR;
+ std::shared_ptr<SvxLRSpaceItem> m_xLR;
const SvxBoxItem &m_rBox;
const SvxShadowItem &m_rShadow;
const Size m_aFrameSize;
diff --git a/sw/source/core/layout/frmtool.cxx b/sw/source/core/layout/frmtool.cxx
index 6bccf8d73869..cb16a9f59deb 100644
--- a/sw/source/core/layout/frmtool.cxx
+++ b/sw/source/core/layout/frmtool.cxx
@@ -2227,7 +2227,7 @@ SwBorderAttrs::SwBorderAttrs(const sw::BorderCacheOwner* pOwner, const SwFrame*
, m_rUL(m_rAttrSet.GetULSpace())
// #i96772#
// LRSpaceItem is copied due to the possibility that it is adjusted - see below
- , m_rLR(m_rAttrSet.GetLRSpace().Clone())
+ , m_xLR(m_rAttrSet.GetLRSpace().Clone())
, m_rBox(m_rAttrSet.GetBox())
, m_rShadow(m_rAttrSet.GetShadow())
, m_aFrameSize(m_rAttrSet.GetFrameSize().GetSize())
@@ -2248,13 +2248,15 @@ SwBorderAttrs::SwBorderAttrs(const sw::BorderCacheOwner* pOwner, const SwFrame*
const SwTextFrame* pTextFrame = pConstructor->DynCastTextFrame();
if ( pTextFrame )
{
- pTextFrame->GetTextNodeForParaProps()->ClearLRSpaceItemDueToListLevelIndents( m_rLR );
+ pTextFrame->GetTextNodeForParaProps()->ClearLRSpaceItemDueToListLevelIndents( m_xLR );
}
else if ( pConstructor->IsNoTextFrame() )
{
- m_rLR = std::make_shared<SvxLRSpaceItem>(RES_LR_SPACE);
+ m_xLR = std::make_shared<SvxLRSpaceItem>(RES_LR_SPACE);
}
+ assert(m_xLR && "always exists");
+
// Caution: The USHORTs for the cached values are not initialized by intention!
// everything needs to be calculated at least once:
@@ -2285,15 +2287,12 @@ void SwBorderAttrs::CalcTop_()
{
m_nTop = CalcTopLine() + m_rUL.GetUpper();
- if (m_rLR)
+ bool bGutterAtTop = m_rAttrSet.GetDoc()->getIDocumentSettingAccess().get(
+ DocumentSettingId::GUTTER_AT_TOP);
+ if (bGutterAtTop)
{
- bool bGutterAtTop = m_rAttrSet.GetDoc()->getIDocumentSettingAccess().get(
- DocumentSettingId::GUTTER_AT_TOP);
- if (bGutterAtTop)
- {
- // Decrease the print area: the top space is the sum of top and gutter margins.
- m_nTop += m_rLR->GetGutterMargin();
- }
+ // Decrease the print area: the top space is the sum of top and gutter margins.
+ m_nTop += m_xLR->GetGutterMargin();
}
m_bTop = false;
@@ -2320,9 +2319,9 @@ tools::Long SwBorderAttrs::CalcRight( const SwFrame* pCaller ) const
}
// for paragraphs, "left" is "before text" and "right" is "after text"
if ( pCaller->IsTextFrame() && pCaller->IsRightToLeft() )
- nRight += m_rLR->GetLeft();
+ nRight += m_xLR->GetLeft();
else
- nRight += m_rLR->GetRight();
+ nRight += m_xLR->GetRight();
// correction: retrieve left margin for numbering in R2L-layout
if ( pCaller->IsTextFrame() && pCaller->IsRightToLeft() )
@@ -2330,7 +2329,7 @@ tools::Long SwBorderAttrs::CalcRight( const SwFrame* pCaller ) const
nRight += static_cast<const SwTextFrame*>(pCaller)->GetTextNodeForParaProps()->GetLeftMarginWithNum();
}
- if (pCaller->IsPageFrame() && m_rLR)
+ if (pCaller->IsPageFrame())
{
const auto pPageFrame = static_cast<const SwPageFrame*>(pCaller);
bool bGutterAtTop = pPageFrame->GetFormat()->getIDocumentSettingAccess().get(
@@ -2338,7 +2337,7 @@ tools::Long SwBorderAttrs::CalcRight( const SwFrame* pCaller ) const
if (!bGutterAtTop)
{
bool bRtlGutter = pPageFrame->GetAttrSet()->GetItem<SfxBoolItem>(RES_RTL_GUTTER)->GetValue();
- tools::Long nGutterMargin = bRtlGutter ? m_rLR->GetGutterMargin() : m_rLR->GetRightGutterMargin();
+ tools::Long nGutterMargin = bRtlGutter ? m_xLR->GetGutterMargin() : m_xLR->GetRightGutterMargin();
// Decrease the print area: the right space is the sum of right and right gutter
// margins.
nRight += nGutterMargin;
@@ -2383,7 +2382,7 @@ tools::Long SwBorderAttrs::CalcLeft( const SwFrame *pCaller ) const
// for paragraphs, "left" is "before text" and "right" is "after text"
if ( pCaller->IsTextFrame() && pCaller->IsRightToLeft() )
- nLeft += m_rLR->GetRight();
+ nLeft += m_xLR->GetRight();
else
{
bool bIgnoreMargin = false;
@@ -2401,7 +2400,7 @@ tools::Long SwBorderAttrs::CalcLeft( const SwFrame *pCaller ) const
}
}
if (!bIgnoreMargin)
- nLeft += m_rLR->GetLeft();
+ nLeft += m_xLR->GetLeft();
}
// correction: do not retrieve left margin for numbering in R2L-layout
@@ -2410,7 +2409,7 @@ tools::Long SwBorderAttrs::CalcLeft( const SwFrame *pCaller ) const
nLeft += static_cast<const SwTextFrame*>(pCaller)->GetTextNodeForParaProps()->GetLeftMarginWithNum();
}
- if (pCaller->IsPageFrame() && m_rLR)
+ if (pCaller->IsPageFrame())
{
const auto pPageFrame = static_cast<const SwPageFrame*>(pCaller);
bool bGutterAtTop = pPageFrame->GetFormat()->getIDocumentSettingAccess().get(
@@ -2418,7 +2417,7 @@ tools::Long SwBorderAttrs::CalcLeft( const SwFrame *pCaller ) const
if (!bGutterAtTop)
{
bool bRtlGutter = pPageFrame->GetAttrSet()->GetItem<SfxBoolItem>(RES_RTL_GUTTER)->GetValue();
- tools::Long nGutterMargin = bRtlGutter ? m_rLR->GetRightGutterMargin() : m_rLR->GetGutterMargin();
+ tools::Long nGutterMargin = bRtlGutter ? m_xLR->GetRightGutterMargin() : m_xLR->GetGutterMargin();
// Decrease the print area: the left space is the sum of left and gutter margins.
nLeft += nGutterMargin;
}