include/editeng/editdata.hxx | 15 +++++++++++++++ include/xmloff/txtstyli.hxx | 9 --------- sw/source/core/access/accmap.cxx | 5 +++++ sw/source/core/undo/undel.cxx | 15 +++++++++++++++ xmloff/source/text/txtimp.cxx | 4 ++-- xmloff/source/text/txtstyli.cxx | 20 ++++++++++---------- 6 files changed, 47 insertions(+), 21 deletions(-)
New commits: commit ddf8d9a150e3e1725de65577c48d47918b4b11a8 Author: Michael Stahl <mst...@redhat.com> Date: Tue Jul 4 22:46:15 2017 +0200 sw: fix use-after-free in SwAccessibleMap::FireEvents() As seen when running JunitTest_sw_unoapi_3 against "make debugrun", the damn thing can call itself recursively via an odd corner case in GetContext(): 0 in SwAccessibleEventList_Impl::~SwAccessibleEventList_Impl() (this=0x9a6a170, __in_chrg=<optimized out>) at sw/source/core/access/accmap.cxx:498 1 in SwAccessibleMap::FireEvents() (this=0x8198bb0) at sw/source/core/access/accmap.cxx:3023 2 in SwAccessibleMap::InvalidateCursorPosition(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessible> const&) (this=0x8198bb0, rAcc=uno::Reference to (SwAccessibleParagraph *) 0x9a439d8) at sw/source/core/access/accmap.cxx:1069 3 in SwAccessibleMap::GetContext(SwFrame const*, bool) (this=0x8198bb0, pFrame=0x825ca10, bCreate=true) at sw/source/core/access/accmap.cxx:1925 4 in SwAccessibleMap::GetContextImpl(SwFrame const*, bool) (this=0x8198bb0, pFrame=0x825ca10, bCreate=true) at sw/source/core/access/accmap.cxx:1936 5 in SwAccessibleContext::InvalidateChildPosOrSize(sw::access::SwAccessibleChild const&, SwRect const&) (this=0x405a350, rChildFrameOrObj=..., rOldFrame=SwRect = {...}) at sw/source/core/access/acccontext.cxx:1196 6 in SwAccessibleMap::FireEvent(SwAccessibleEvent_Impl const&) (this=0x8198bb0, rEvent=...) at sw/source/core/access/accmap.cxx:898 7 in SwAccessibleMap::FireEvents() (this=0x8198bb0) at sw/source/core/access/accmap.cxx:3018 8 in SwViewShellImp::FireAccessibleEvents() (this=0x7744dc0) at sw/source/core/view/viewimp.cxx:460 9 in SwLayIdle::SwLayIdle(SwRootFrame*, SwViewShellImp*) (this=0x7ffc63395e30, pRt=0x7745120, pI=0x7744dc0) at sw/source/core/layout/layact.cxx:2267 Presumably all of mpEvents, mpEventMap and mpShapes must live until the outermost FireEvents() completes. Change-Id: I4e5a053035bf7fc12d9407913437d721889950ae diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx index 3c328fda911a..0a0337929ab4 100644 --- a/sw/source/core/access/accmap.cxx +++ b/sw/source/core/access/accmap.cxx @@ -3010,6 +3010,11 @@ void SwAccessibleMap::FireEvents() osl::MutexGuard aGuard( maEventMutex ); if( mpEvents ) { + if (mpEvents->IsFiring()) + { + return; // prevent recursive FireEvents() + } + mpEvents->SetFiring(); mpEvents->MoveMissingXAccToEnd(); for( auto const& aEvent : *mpEvents ) commit 789433da173ddf528e31a93d15ab5adfe722d183 Author: Michael Stahl <mst...@redhat.com> Date: Tue Jul 4 17:36:05 2017 +0200 xmloff: XMLTextStyleContext: remove property name constant members Change-Id: Ica367371f1f7fb6e7858c8e35ec4c8de994e357d diff --git a/include/xmloff/txtstyli.hxx b/include/xmloff/txtstyli.hxx index 0588e52aa004..0c7e5891ae57 100644 --- a/include/xmloff/txtstyli.hxx +++ b/include/xmloff/txtstyli.hxx @@ -33,15 +33,6 @@ class XMLOFF_DLLPUBLIC XMLTextStyleContext : public XMLPropStyleContext OUString m_sDropCapTextStyleName; OUString m_sMasterPageName; OUString m_sDataStyleName; // for grid columns only - const OUString sIsAutoUpdate; - const OUString sCategory; - const OUString sNumberingStyleName; - const OUString sOutlineLevel; - -public: - const OUString sDropCapCharStyleName; -private: - const OUString sPageDescName; sal_Int8 m_nOutlineLevel; diff --git a/xmloff/source/text/txtimp.cxx b/xmloff/source/text/txtimp.cxx index dc6b16147c19..b2653f152871 100644 --- a/xmloff/source/text/txtimp.cxx +++ b/xmloff/source/text/txtimp.cxx @@ -1752,9 +1752,9 @@ OUString XMLTextImportHelper::SetStyleAndAttrs( XML_STYLE_FAMILY_TEXT_TEXT, pStyle->GetDropCapStyleName()) ); if (m_xImpl->m_xTextStyles->hasByName(sDisplayName) && - xPropSetInfo->hasPropertyByName( pStyle->sDropCapCharStyleName ) ) + xPropSetInfo->hasPropertyByName("DropCapCharStyleName")) { - xPropSet->setPropertyValue( pStyle->sDropCapCharStyleName, makeAny(sDisplayName) ); + xPropSet->setPropertyValue("DropCapCharStyleName", makeAny(sDisplayName)); } } diff --git a/xmloff/source/text/txtstyli.cxx b/xmloff/source/text/txtstyli.cxx index 345bd60c0889..b03e0382c73f 100644 --- a/xmloff/source/text/txtstyli.cxx +++ b/xmloff/source/text/txtstyli.cxx @@ -133,12 +133,6 @@ XMLTextStyleContext::XMLTextStyleContext( SvXMLImport& rImport, SvXMLStylesContext& rStyles, sal_uInt16 nFamily, bool bDefaultStyle ) : XMLPropStyleContext( rImport, nPrfx, rLName, xAttrList, rStyles, nFamily, bDefaultStyle ) -, sIsAutoUpdate( "IsAutoUpdate" ) -, sCategory( "Category" ) -, sNumberingStyleName( "NumberingStyleName" ) -, sOutlineLevel("OutlineLevel" ) -, sDropCapCharStyleName( "DropCapCharStyleName" ) -, sPageDescName( "PageDescName" ) , m_nOutlineLevel( -1 ) , m_isAutoUpdate( false ) , m_bHasMasterPageName( false ) @@ -211,6 +205,8 @@ void XMLTextStyleContext::CreateAndInsert( bool bOverwrite ) Reference < XPropertySet > xPropSet( xStyle, UNO_QUERY ); Reference< XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo(); + + OUString const sIsAutoUpdate("IsAutoUpdate"); if( xPropSetInfo->hasPropertyByName( sIsAutoUpdate ) ) { xPropSet->setPropertyValue( sIsAutoUpdate, Any(m_isAutoUpdate) ); @@ -219,10 +215,10 @@ void XMLTextStyleContext::CreateAndInsert( bool bOverwrite ) sal_uInt16 nCategory = ParagraphStyleCategory::TEXT; if( XML_STYLE_FAMILY_TEXT_PARAGRAPH == GetFamily() && !m_sCategoryVal.isEmpty() && xStyle->isUserDefined() && - xPropSetInfo->hasPropertyByName( sCategory ) && + xPropSetInfo->hasPropertyByName("Category") && SvXMLUnitConverter::convertEnum( nCategory, m_sCategoryVal, aCategoryMap)) { - xPropSet->setPropertyValue( sCategory, Any((sal_Int16)nCategory) ); + xPropSet->setPropertyValue("Category", Any(static_cast<sal_Int16>(nCategory))); } // tell the style about it's events (if applicable) @@ -277,6 +273,7 @@ void XMLTextStyleContext::Finish( bool bOverwrite ) Reference< XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo(); + OUString const sOutlineLevel("OutlineLevel"); if( xPropSetInfo->hasPropertyByName( sOutlineLevel )) { if (m_nOutlineLevel >= 0) @@ -286,6 +283,7 @@ void XMLTextStyleContext::Finish( bool bOverwrite ) } // Consider set empty list style (#i69523#) + OUString const sNumberingStyleName("NumberingStyleName"); if (m_bListStyleSet && xPropSetInfo->hasPropertyByName( sNumberingStyleName ) ) { @@ -352,9 +350,9 @@ void XMLTextStyleContext::Finish( bool bOverwrite ) GetImport().GetTextImport()->GetTextStyles(); if( rTextStyles.is() && rTextStyles->hasByName( sDisplayDropCapTextStyleName ) && - xPropSetInfo->hasPropertyByName( sDropCapCharStyleName ) ) + xPropSetInfo->hasPropertyByName("DropCapCharStyleName")) { - xPropSet->setPropertyValue( sDropCapCharStyleName, Any(sDisplayDropCapTextStyleName) ); + xPropSet->setPropertyValue("DropCapCharStyleName", Any(sDisplayDropCapTextStyleName)); } } @@ -366,6 +364,8 @@ void XMLTextStyleContext::Finish( bool bOverwrite ) // The families container must exist const Reference < XNameContainer >& rPageStyles = GetImport().GetTextImport()->GetPageStyles(); + + OUString const sPageDescName("PageDescName"); if( ( sDisplayName.isEmpty() || (rPageStyles.is() && rPageStyles->hasByName( sDisplayName )) ) && commit c9c1135de2be25c8630c1197df80e5ceb4f9907a Author: Michael Stahl <mst...@redhat.com> Date: Tue Jul 4 17:20:56 2017 +0200 editeng: add some operator<< for ESelection, EPosition Change-Id: I4c3ff2101e7e80c0738401753333bc8c088987f3 diff --git a/include/editeng/editdata.hxx b/include/editeng/editdata.hxx index 12b6bff6474d..cf19fbde88d4 100644 --- a/include/editeng/editdata.hxx +++ b/include/editeng/editdata.hxx @@ -24,6 +24,7 @@ #include <rtl/ustring.hxx> #include <editeng/editengdllapi.h> #include <memory> +#include <ostream> class SfxItemSet; class SfxPoolItem; @@ -106,6 +107,13 @@ struct EPosition { } }; +template<typename charT, typename traits> +inline std::basic_ostream<charT, traits> & operator <<( + std::basic_ostream<charT, traits> & stream, EPosition const& pos) +{ + return stream << "EPosition(" << pos.nPara << ',' << pos.nIndex << ")"; +} + struct ESelection { sal_Int32 nStartPara; @@ -138,6 +146,13 @@ struct ESelection bool HasRange() const; }; +template<typename charT, typename traits> +inline std::basic_ostream<charT, traits> & operator <<( + std::basic_ostream<charT, traits> & stream, ESelection const& sel) +{ + return stream << "ESelection(" << sel.nStartPara << ',' << sel.nStartPos << "," << sel.nEndPara << "," << sel.nEndPos << ")"; +} + inline bool ESelection::HasRange() const { return ( nStartPara != nEndPara ) || ( nStartPos != nEndPos ); commit b4c4187bcc6ab03be1b9c1c05cf992677c546c08 Author: Michael Stahl <mst...@redhat.com> Date: Tue Jul 4 15:49:52 2017 +0200 sw: fix Undo strings when deleting input fields and fieldmarks Filter our current collection of magic dummy chars in DenoteSpecialCharacters() so that no weird U+000004 code points are displayed in tooltips of the Undo button. Change-Id: I7c7fe9b79b452624bb2569ffa18939e3e5ab1a53 diff --git a/sw/source/core/undo/undel.cxx b/sw/source/core/undo/undel.cxx index dfae9e8e779a..94a86342db6d 100644 --- a/sw/source/core/undo/undel.cxx +++ b/sw/source/core/undo/undel.cxx @@ -564,6 +564,11 @@ static bool lcl_IsSpecialCharacter(sal_Unicode nChar) case CH_TXTATR_INWORD: case CH_TXTATR_TAB: case CH_TXTATR_NEWLINE: + case CH_TXT_ATR_INPUTFIELDSTART: + case CH_TXT_ATR_INPUTFIELDEND: + case CH_TXT_ATR_FORMELEMENT: + case CH_TXT_ATR_FIELDSTART: + case CH_TXT_ATR_FIELDEND: return true; default: @@ -598,6 +603,16 @@ static OUString lcl_DenotedPortion(const OUString& rStr, sal_Int32 nStart, sal_I aResult = SwRewriter::GetPlaceHolder(UndoArg2); break; + case CH_TXT_ATR_INPUTFIELDSTART: + case CH_TXT_ATR_INPUTFIELDEND: + case CH_TXT_ATR_FORMELEMENT: + case CH_TXT_ATR_FIELDSTART: + case CH_TXT_ATR_FIELDEND: + break; // nothing? + + default: + assert(!"unexpected special character"); + break; } SwRewriter aRewriter; aRewriter.AddRule(UndoArg1, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits