diff options
author | Henning Brinkmann <hbrinkm@openoffice.org> | 2010-02-16 15:21:57 +0100 |
---|---|---|
committer | Henning Brinkmann <hbrinkm@openoffice.org> | 2010-02-16 15:21:57 +0100 |
commit | 77a8443fc381591ce33d3a8ea3c8a7991b287aed (patch) | |
tree | 60eef19ef36d9e0c97db9eebb7bb5d4e823b6069 /writerfilter | |
parent | writerfilter07: fixed memory leak in OOXMLPropertyImpl::resolve (diff) | |
download | core-77a8443fc381591ce33d3a8ea3c8a7991b287aed.tar.gz core-77a8443fc381591ce33d3a8ea3c8a7991b287aed.zip |
writerfilter07: fixed memory leak related to FontEntry/FontTable
Diffstat (limited to 'writerfilter')
-rwxr-xr-x | writerfilter/source/dmapper/DomainMapper.cxx | 2 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 2 | ||||
-rw-r--r-- | writerfilter/source/dmapper/FontTable.cxx | 17 | ||||
-rw-r--r-- | writerfilter/source/dmapper/FontTable.hxx | 5 | ||||
-rw-r--r-- | writerfilter/source/dmapper/StyleSheetTable.cxx | 6 |
5 files changed, 17 insertions, 15 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 2e4f253ecf4c..1dc49f997794 100755 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3044,7 +3044,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp eFontPitch = PROP_CHAR_FONT_PITCH_COMPLEX; break; } - const FontEntry* pFontEntry = pFontTable->getFontEntry(sal_uInt32(nIntValue)); + const FontEntry::Pointer_t pFontEntry(pFontTable->getFontEntry(sal_uInt32(nIntValue))); rContext->Insert(eFontName, true, uno::makeAny( pFontEntry->sFontName )); // rContext->Insert(eFontStyle, uno::makeAny( pFontEntry-> )); // rContext->Insert(eFontFamily, uno::makeAny( pFontEntry-> )); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index c724a1c76e68..828246513561 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1370,7 +1370,7 @@ void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote ) uno::Sequence< beans::PropertyValue > aFontProperties; if( pFontTable && pTopContext->GetFootnoteFontId() >= 0 && pFontTable->size() > (size_t)pTopContext->GetFootnoteFontId() ) { - const FontEntry* pFontEntry = pFontTable->getFontEntry(sal_uInt32(pTopContext->GetFootnoteFontId())); + const FontEntry::Pointer_t pFontEntry(pFontTable->getFontEntry(sal_uInt32(pTopContext->GetFootnoteFontId()))); PropertyMapPtr aFontProps( new PropertyMap ); aFontProps->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( pFontEntry->sFontName )); aFontProps->Insert(PROP_CHAR_FONT_CHAR_SET, true, uno::makeAny( (sal_Int16)pFontEntry->nTextEncoding )); diff --git a/writerfilter/source/dmapper/FontTable.cxx b/writerfilter/source/dmapper/FontTable.cxx index 8d7071d16be1..7ccedccf8212 100644 --- a/writerfilter/source/dmapper/FontTable.cxx +++ b/writerfilter/source/dmapper/FontTable.cxx @@ -42,10 +42,9 @@ namespace dmapper struct FontTable_Impl { - std::vector< FontEntry > aFontEntries; - FontEntry* pCurrentEntry; - FontTable_Impl() : - pCurrentEntry(0){} + std::vector< FontEntry > aFontEntries; + FontEntry::Pointer_t pCurrentEntry; + FontTable_Impl() {} }; /*-- 19.06.2006 12:04:32--------------------------------------------------- @@ -569,11 +568,11 @@ void FontTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_ { //create a new font entry OSL_ENSURE( !m_pImpl->pCurrentEntry, "current entry has to be NULL here"); - m_pImpl->pCurrentEntry = new FontEntry ; + m_pImpl->pCurrentEntry.reset(new FontEntry); ref->resolve(*this); //append it to the table m_pImpl->aFontEntries.push_back( *m_pImpl->pCurrentEntry ); - m_pImpl->pCurrentEntry = 0; + m_pImpl->pCurrentEntry.reset(); } /*-- 19.06.2006 12:04:34--------------------------------------------------- @@ -659,12 +658,12 @@ void FontTable::endShape( ) /*-- 21.06.2006 11:21:38--------------------------------------------------- -----------------------------------------------------------------------*/ -const FontEntry* FontTable::getFontEntry(sal_uInt32 nIndex) +const FontEntry::Pointer_t FontTable::getFontEntry(sal_uInt32 nIndex) { - const FontEntry* pRet = 0; + FontEntry::Pointer_t pRet; if(m_pImpl->aFontEntries.size() > nIndex) { - pRet = &m_pImpl->aFontEntries[nIndex]; + pRet.reset(&m_pImpl->aFontEntries[nIndex]); } return pRet; } diff --git a/writerfilter/source/dmapper/FontTable.hxx b/writerfilter/source/dmapper/FontTable.hxx index b47374d2b0f9..e67e2ba1d9ed 100644 --- a/writerfilter/source/dmapper/FontTable.hxx +++ b/writerfilter/source/dmapper/FontTable.hxx @@ -31,6 +31,7 @@ #ifndef INCLUDED_FONTTABLE_HXX #define INCLUDED_FONTTABLE_HXX +#include <boost/shared_ptr.hpp> #include <WriterFilterDllApi.hxx> #include <resourcemodel/WW8ResourceModel.hxx> #include <com/sun/star/lang/XComponent.hpp> @@ -42,6 +43,8 @@ namespace dmapper struct FontTable_Impl; struct FontEntry { + typedef boost::shared_ptr<FontEntry> Pointer_t; + ::rtl::OUString sFontName; ::rtl::OUString sFontName1; bool bTrueType; @@ -100,7 +103,7 @@ public: virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape ); virtual void endShape( ); - const FontEntry* getFontEntry(sal_uInt32 nIndex); + const FontEntry::Pointer_t getFontEntry(sal_uInt32 nIndex); sal_uInt32 size(); }; typedef boost::shared_ptr< FontTable > FontTablePtr; diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx index d851500ba1e8..9cafe6b640a4 100644 --- a/writerfilter/source/dmapper/StyleSheetTable.cxx +++ b/writerfilter/source/dmapper/StyleSheetTable.cxx @@ -862,18 +862,18 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable ) // font size to 240 twip (12 pts) for all if not set pEntry->pProperties->Insert(PROP_CHAR_HEIGHT, true, aTwoHundredFortyTwip, false); // western font not already set -> apply first font - const FontEntry* pWesternFontEntry = rFontTable->getFontEntry( 0 ); + const FontEntry::Pointer_t pWesternFontEntry(rFontTable->getFontEntry( 0 )); rtl::OUString sWesternFontName = pWesternFontEntry->sFontName; pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( sWesternFontName ), false); // CJK ... apply second font - const FontEntry* pCJKFontEntry = rFontTable->getFontEntry( 2 ); + const FontEntry::Pointer_t pCJKFontEntry(rFontTable->getFontEntry( 2 )); pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME_ASIAN, true, uno::makeAny( pCJKFontEntry->sFontName ), false); pEntry->pProperties->Insert(PROP_CHAR_HEIGHT_ASIAN, true, aTwoHundredFortyTwip, false); // CTL ... apply third font, if available if( nFontCount > 3 ) { - const FontEntry* pCTLFontEntry = rFontTable->getFontEntry( 3 ); + const FontEntry::Pointer_t pCTLFontEntry(rFontTable->getFontEntry( 3 )); pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( pCTLFontEntry->sFontName ), false); pEntry->pProperties->Insert(PROP_CHAR_HEIGHT_COMPLEX, true, aTwoHundredFortyTwip, false); } |