diff options
author | Xisco Fauli <xiscofauli@libreoffice.org> | 2023-07-05 11:29:34 +0200 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2023-07-06 16:41:07 +0200 |
commit | 359e2be93a4560a86237f076003c23a6635fb1bb (patch) | |
tree | 067dd8ec05707e0f37f853b13de7120babe106d5 /starmath | |
parent | 3d2f9b63e61a32ff07d850103f059dda88b56d6e (diff) |
starmath: check GetEditWindow()
it might return nullptr
See https://crashreport.libreoffice.org/stats/signature/SmPrintOptionsTabPage::~SmPrintOptionsTabPage()
Change-Id: I4b34b0da3dc282ae89fd58defa12045c34a12cfb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154026
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Diffstat (limited to 'starmath')
-rw-r--r-- | starmath/source/dialog.cxx | 6 | ||||
-rw-r--r-- | starmath/source/view.cxx | 136 |
2 files changed, 73 insertions, 69 deletions
diff --git a/starmath/source/dialog.cxx b/starmath/source/dialog.cxx index ecb68dbf2d63..03bbc60da66a 100644 --- a/starmath/source/dialog.cxx +++ b/starmath/source/dialog.cxx @@ -182,7 +182,8 @@ SmPrintOptionsTabPage::SmPrintOptionsTabPage(weld::Container* pPage, weld::Dialo SmPrintOptionsTabPage::~SmPrintOptionsTabPage() { if (SmViewShell *pViewSh = SmGetActiveView()) - pViewSh->GetEditWindow()->UpdateStatus(); + if (SmEditWindow* pEdit = pViewSh->GetEditWindow()) + pEdit->UpdateStatus(); } bool SmPrintOptionsTabPage::FillItemSet(SfxItemSet* rSet) @@ -206,7 +207,8 @@ bool SmPrintOptionsTabPage::FillItemSet(SfxItemSet* rSet) rSet->Put(SfxUInt16Item(SID_SMEDITWINDOWZOOM, sal::static_int_cast<sal_uInt16>(m_xSmZoom->get_value(FieldUnit::PERCENT)))); if (SmViewShell *pViewSh = SmGetActiveView()) - pViewSh->GetEditWindow()->UpdateStatus(); + if (SmEditWindow* pEdit = pViewSh->GetEditWindow()) + pEdit->UpdateStatus(); return true; } diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx index d056e4c86ee7..a67745184e34 100644 --- a/starmath/source/view.cxx +++ b/starmath/source/view.cxx @@ -415,8 +415,8 @@ void SmGraphicWidget::GetFocus() { if (!SmViewShell::IsInlineEditEnabled()) return; - if (GetView().GetEditWindow()) - GetView().GetEditWindow()->Flush(); + if (SmEditWindow* pEdit = GetView().GetEditWindow()) + pEdit->Flush(); //Let view shell know what insertions should be done in visual editor GetView().SetInsertIntoEditWindow(false); SetIsCursorVisible(true); @@ -591,8 +591,7 @@ void SmGraphicWidget::Paint(vcl::RenderContext& rRenderContext, const tools::Rec { SetIsCursorVisible(false); // (old) cursor must be drawn again - const SmEditWindow* pEdit = GetView().GetEditWindow(); - if (pEdit) + if (const SmEditWindow* pEdit = GetView().GetEditWindow()) { // get new position for formula-cursor (for possible altered formula) sal_Int32 nRow; sal_uInt16 nCol; @@ -1568,8 +1567,9 @@ void SmViewShell::ShowError(const SmErrorDesc* pErrorDesc) if (pErrorDesc || nullptr != (pErrorDesc = GetDoc()->GetParser()->GetError()) ) { SetStatusText( pErrorDesc->m_aText ); - GetEditWindow()->MarkError( Point( pErrorDesc->m_pNode->GetColumn(), - pErrorDesc->m_pNode->GetRow())); + if (SmEditWindow* pEdit = GetEditWindow()) + pEdit->MarkError( Point( pErrorDesc->m_pNode->GetColumn(), + pErrorDesc->m_pNode->GetRow())); } } @@ -1612,8 +1612,7 @@ void SmViewShell::Insert( SfxMedium& rMedium ) return; OUString aText = pDoc->GetText(); - SmEditWindow *pEditWin = GetEditWindow(); - if (pEditWin) + if (SmEditWindow *pEditWin = GetEditWindow()) pEditWin->InsertText( aText ); else { @@ -1649,8 +1648,7 @@ void SmViewShell::InsertFrom(SfxMedium &rMedium) return; OUString aText = pDoc->GetText(); - SmEditWindow *pEditWin = GetEditWindow(); - if (pEditWin) + if (SmEditWindow *pEditWin = GetEditWindow()) pEditWin->InsertText(aText); else SAL_WARN( "starmath", "EditWindow missing" ); @@ -1720,8 +1718,8 @@ void SmViewShell::Execute(SfxRequest& rReq) auto pTrans = dynamic_cast<TransferableHelper*>(xTrans.get()); if (pTrans) { - SmEditWindow *pEditWin = GetEditWindow(); - pTrans->CopyToClipboard(pEditWin->GetClipboard()); + if (pWin) + pTrans->CopyToClipboard(pWin->GetClipboard()); } } } @@ -1729,15 +1727,17 @@ void SmViewShell::Execute(SfxRequest& rReq) case SID_PASTEOBJECT: { - SmEditWindow *pEditWin = GetEditWindow(); - TransferableDataHelper aData(TransferableDataHelper::CreateFromClipboard(pEditWin->GetClipboard())); uno::Reference < io::XInputStream > xStrm; - SotClipboardFormatId nId; - if( aData.GetTransferable().is() && - ( aData.HasFormat( nId = SotClipboardFormatId::EMBEDDED_OBJ ) || - (aData.HasFormat( SotClipboardFormatId::OBJECTDESCRIPTOR ) && - aData.HasFormat( nId = SotClipboardFormatId::EMBED_SOURCE )))) - xStrm = aData.GetInputStream(nId, OUString()); + if (pWin) + { + TransferableDataHelper aData(TransferableDataHelper::CreateFromClipboard(pWin->GetClipboard())); + SotClipboardFormatId nId; + if( aData.GetTransferable().is() && + ( aData.HasFormat( nId = SotClipboardFormatId::EMBEDDED_OBJ ) || + (aData.HasFormat( SotClipboardFormatId::OBJECTDESCRIPTOR ) && + aData.HasFormat( nId = SotClipboardFormatId::EMBED_SOURCE )))) + xStrm = aData.GetInputStream(nId, OUString()); + } if (xStrm.is()) { @@ -1782,16 +1782,18 @@ void SmViewShell::Execute(SfxRequest& rReq) bool bCallExec = nullptr == pWin; if( !bCallExec ) { - SmEditWindow *pEditWin = GetEditWindow(); - TransferableDataHelper aDataHelper( - TransferableDataHelper::CreateFromClipboard( - pEditWin->GetClipboard())); + if (pWin) + { + TransferableDataHelper aDataHelper( + TransferableDataHelper::CreateFromClipboard( + pWin->GetClipboard())); - if( aDataHelper.GetTransferable().is() && - aDataHelper.HasFormat( SotClipboardFormatId::STRING )) - pWin->Paste(); - else - bCallExec = true; + if( aDataHelper.GetTransferable().is() && + aDataHelper.HasFormat( SotClipboardFormatId::STRING )) + pWin->Paste(); + else + bCallExec = true; + } } if( bCallExec ) { @@ -1851,53 +1853,55 @@ void SmViewShell::Execute(SfxRequest& rReq) case SID_IMPORT_MATHML_CLIPBOARD: { - SmEditWindow *pEditWin = GetEditWindow(); - TransferableDataHelper aDataHelper(TransferableDataHelper::CreateFromClipboard(pEditWin->GetClipboard())); - uno::Reference < io::XInputStream > xStrm; - if ( aDataHelper.GetTransferable().is() ) + if (pWin) { - SotClipboardFormatId nId = SotClipboardFormatId::MATHML; - if (aDataHelper.HasFormat(nId)) + TransferableDataHelper aDataHelper(TransferableDataHelper::CreateFromClipboard(pWin->GetClipboard())); + uno::Reference < io::XInputStream > xStrm; + if ( aDataHelper.GetTransferable().is() ) { - xStrm = aDataHelper.GetInputStream(nId, ""); - if (xStrm.is()) - { - SfxMedium aClipboardMedium; - aClipboardMedium.GetItemSet(); //generate initial itemset, not sure if necessary - std::shared_ptr<const SfxFilter> pMathFilter = - SfxFilter::GetFilterByName(MATHML_XML); - aClipboardMedium.SetFilter(pMathFilter); - aClipboardMedium.setStreamToLoadFrom(xStrm, true /*bIsReadOnly*/); - InsertFrom(aClipboardMedium); - GetDoc()->UpdateText(); - } - } - else - { - nId = SotClipboardFormatId::STRING; + SotClipboardFormatId nId = SotClipboardFormatId::MATHML; if (aDataHelper.HasFormat(nId)) { - // In case of FORMAT_STRING no stream exists, need to generate one - OUString aString; - if (aDataHelper.GetString( nId, aString)) + xStrm = aDataHelper.GetInputStream(nId, ""); + if (xStrm.is()) { - // tdf#117091 force xml declaration to exist - if (!aString.startsWith("<?xml")) - aString = "<?xml version=\"1.0\"?>\n" + aString; - SfxMedium aClipboardMedium; - aClipboardMedium.GetItemSet(); //generates initial itemset, not sure if necessary + aClipboardMedium.GetItemSet(); //generate initial itemset, not sure if necessary std::shared_ptr<const SfxFilter> pMathFilter = SfxFilter::GetFilterByName(MATHML_XML); aClipboardMedium.SetFilter(pMathFilter); - - SvMemoryStream aStrm( const_cast<sal_Unicode *>(aString.getStr()), aString.getLength() * sizeof(sal_Unicode), StreamMode::READ); - uno::Reference<io::XInputStream> xStrm2( new ::utl::OInputStreamWrapper(aStrm) ); - aClipboardMedium.setStreamToLoadFrom(xStrm2, true /*bIsReadOnly*/); + aClipboardMedium.setStreamToLoadFrom(xStrm, true /*bIsReadOnly*/); InsertFrom(aClipboardMedium); GetDoc()->UpdateText(); } } + else + { + nId = SotClipboardFormatId::STRING; + if (aDataHelper.HasFormat(nId)) + { + // In case of FORMAT_STRING no stream exists, need to generate one + OUString aString; + if (aDataHelper.GetString( nId, aString)) + { + // tdf#117091 force xml declaration to exist + if (!aString.startsWith("<?xml")) + aString = "<?xml version=\"1.0\"?>\n" + aString; + + SfxMedium aClipboardMedium; + aClipboardMedium.GetItemSet(); //generates initial itemset, not sure if necessary + std::shared_ptr<const SfxFilter> pMathFilter = + SfxFilter::GetFilterByName(MATHML_XML); + aClipboardMedium.SetFilter(pMathFilter); + + SvMemoryStream aStrm( const_cast<sal_Unicode *>(aString.getStr()), aString.getLength() * sizeof(sal_Unicode), StreamMode::READ); + uno::Reference<io::XInputStream> xStrm2( new ::utl::OInputStreamWrapper(aStrm) ); + aClipboardMedium.setStreamToLoadFrom(xStrm2, true /*bIsReadOnly*/); + InsertFrom(aClipboardMedium); + GetDoc()->UpdateText(); + } + } + } } } break; @@ -2240,16 +2244,14 @@ SmViewShell::~SmViewShell() //!! this view shell is not active anymore !! // Thus 'SmGetActiveView' will give a 0 pointer. // Thus we need to supply this view as argument - SmEditWindow *pEditWin = GetEditWindow(); - if (pEditWin) + if (SmEditWindow *pEditWin = GetEditWindow()) pEditWin->DeleteEditView(); mxGraphicWindow.disposeAndClear(); } void SmViewShell::Deactivate( bool bIsMDIActivate ) { - SmEditWindow *pEdit = GetEditWindow(); - if ( pEdit ) + if (SmEditWindow *pEdit = GetEditWindow()) pEdit->Flush(); SfxViewShell::Deactivate( bIsMDIActivate ); |