editeng/source/editeng/editattr.cxx | 6 -- editeng/source/items/textitem.cxx | 38 +++++------------- include/editeng/colritem.hxx | 10 ++-- include/tools/color.hxx | 4 - tools/source/generic/color.cxx | 2 vcl/qa/cppunit/graphicfilter/data/wmf/fail/hang-3.wmf |binary vcl/source/filter/wmf/enhwmf.cxx | 19 ++++++--- 7 files changed, 34 insertions(+), 45 deletions(-)
New commits: commit 27f6ddefd4b845f3d51221681c864490fa9b580b Author: Caolán McNamara <caol...@redhat.com> Date: Thu Aug 27 12:21:37 2015 +0100 don't write SvxBackgroundColorItem via inherited SvxColorItem::Store SvxBackgroundColorItem inherits from SvxColorItem and for backwards compatibility with the StarOffice 5 binary file format (yes, really) writes/reads only rgb and not the transparency value, so copying and pasting text from a sidebar comment in writer to itself or another one results in a black character background as the default COL_AUTO turns into black (cherry picked from commit 3bc69b1d0d8620afd89a993b5f6bc46a2ff5267f) Change-Id: I18b5105dd8e060b9e49dda6026e26d3a0f00d8f5 Reviewed-on: https://gerrit.libreoffice.org/18074 Reviewed-by: Michael Meeks <michael.me...@collabora.com> Tested-by: Michael Meeks <michael.me...@collabora.com> diff --git a/editeng/source/editeng/editattr.cxx b/editeng/source/editeng/editattr.cxx index 85676ab..66e664f 100644 --- a/editeng/source/editeng/editattr.cxx +++ b/editeng/source/editeng/editattr.cxx @@ -221,7 +221,6 @@ void EditCharAttribColor::SetFont( SvxFont& rFont, OutputDevice* ) { Color aColor = static_cast<const SvxColorItem*>(GetItem())->GetValue(); rFont.SetColor( aColor); - //fprintf(stderr, "Called SetFont with Color %d\n", aColor.GetColor()); } // class EditCharAttribBackgroundColor @@ -238,14 +237,11 @@ EditCharAttribBackgroundColor::EditCharAttribBackgroundColor( void EditCharAttribBackgroundColor::SetFont( SvxFont& rFont, OutputDevice* ) { Color aColor = static_cast<const SvxBackgroundColorItem*>(GetItem())->GetValue(); - rFont.SetFillColor( aColor); rFont.SetTransparent(false); - + rFont.SetFillColor(aColor); } - // class EditCharAttribLanguage - EditCharAttribLanguage::EditCharAttribLanguage( const SvxLanguageItem& rAttr, sal_uInt16 _nStart, sal_uInt16 _nEnd ) : EditCharAttrib( rAttr, _nStart, _nEnd ) { diff --git a/editeng/source/items/textitem.cxx b/editeng/source/items/textitem.cxx index b55d9ad..587e253 100644 --- a/editeng/source/items/textitem.cxx +++ b/editeng/source/items/textitem.cxx @@ -1809,9 +1809,12 @@ SvxBackgroundColorItem::SvxBackgroundColorItem( const Color& rCol, { } -SvxBackgroundColorItem:: SvxBackgroundColorItem( SvStream& rStrm, const sal_uInt16 Id ) : - SvxColorItem( rStrm, Id ) +SvxBackgroundColorItem::SvxBackgroundColorItem(SvStream& rStrm, const sal_uInt16 nId) + : SvxColorItem(nId) { + Color aColor; + aColor.Read(rStrm); + SetValue(aColor); } SvxBackgroundColorItem::SvxBackgroundColorItem( const SvxBackgroundColorItem& rCopy ) : @@ -1821,9 +1824,14 @@ SvxBackgroundColorItem::SvxBackgroundColorItem( const SvxBackgroundColorItem& rC SfxPoolItem* SvxBackgroundColorItem::Clone( SfxItemPool * ) const { - return new SvxBackgroundColorItem( *this ); + return new SvxBackgroundColorItem(*this); } +SvStream& SvxBackgroundColorItem::Store(SvStream& rStrm, sal_uInt16) const +{ + GetValue().Write(rStrm); + return rStrm; +} SfxPoolItem* SvxBackgroundColorItem::Create(SvStream& rStrm, sal_uInt16 ) const { @@ -1877,23 +1885,18 @@ bool SvxBackgroundColorItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId } // class SvxColorItem ---------------------------------------------------- - SvxColorItem::SvxColorItem( const sal_uInt16 nId ) : SfxPoolItem( nId ), mColor( COL_BLACK ) { } - - SvxColorItem::SvxColorItem( const Color& rCol, const sal_uInt16 nId ) : SfxPoolItem( nId ), mColor( rCol ) { } - - SvxColorItem::SvxColorItem( SvStream &rStrm, const sal_uInt16 nId ) : SfxPoolItem( nId ) { @@ -1902,21 +1905,16 @@ SvxColorItem::SvxColorItem( SvStream &rStrm, const sal_uInt16 nId ) : mColor = aColor; } - - SvxColorItem::SvxColorItem( const SvxColorItem &rCopy ) : SfxPoolItem( rCopy ), mColor( rCopy.mColor ) { } - - SvxColorItem::~SvxColorItem() { } - sal_uInt16 SvxColorItem::GetVersion( sal_uInt16 nFFVer ) const { DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer || @@ -1926,8 +1924,6 @@ sal_uInt16 SvxColorItem::GetVersion( sal_uInt16 nFFVer ) const return SOFFICE_FILEFORMAT_50 >= nFFVer ? VERSION_USEAUTOCOLOR : 0; } - - bool SvxColorItem::operator==( const SfxPoolItem& rAttr ) const { DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" ); @@ -1935,16 +1931,12 @@ bool SvxColorItem::operator==( const SfxPoolItem& rAttr ) const return mColor == static_cast<const SvxColorItem&>( rAttr ).mColor; } - - bool SvxColorItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const { rVal <<= (sal_Int32)(mColor.GetColor()); return true; } - - bool SvxColorItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) { sal_Int32 nColor = 0; @@ -1955,15 +1947,11 @@ bool SvxColorItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) return true; } - - SfxPoolItem* SvxColorItem::Clone( SfxItemPool * ) const { return new SvxColorItem( *this ); } - - SvStream& SvxColorItem::Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const { if( VERSION_USEAUTOCOLOR == nItemVersion && @@ -1974,15 +1962,11 @@ SvStream& SvxColorItem::Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const return rStrm; } - - SfxPoolItem* SvxColorItem::Create(SvStream& rStrm, sal_uInt16 /*nVer*/ ) const { return new SvxColorItem( rStrm, Which() ); } - - bool SvxColorItem::GetPresentation ( SfxItemPresentation /*ePres*/, diff --git a/include/editeng/colritem.hxx b/include/editeng/colritem.hxx index bead03e..81f4ac5 100644 --- a/include/editeng/colritem.hxx +++ b/include/editeng/colritem.hxx @@ -91,11 +91,11 @@ class EDITENG_DLLPUBLIC SvxBackgroundColorItem : public SvxColorItem SvxBackgroundColorItem( SvStream& rStrm, const sal_uInt16 nId ); SvxBackgroundColorItem( const SvxBackgroundColorItem& rCopy ); - virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const SAL_OVERRIDE; - virtual SfxPoolItem* Create(SvStream &, sal_uInt16) const SAL_OVERRIDE; - - virtual bool QueryValue(com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0) const SAL_OVERRIDE; - virtual bool PutValue(const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0) SAL_OVERRIDE; + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const SAL_OVERRIDE; + virtual SvStream& Store(SvStream& rStream, sal_uInt16 nVersion) const SAL_OVERRIDE; + virtual SfxPoolItem* Create(SvStream &, sal_uInt16) const SAL_OVERRIDE; + virtual bool QueryValue(css::uno::Any& rVal, sal_uInt8 nMemberId = 0) const SAL_OVERRIDE; + virtual bool PutValue(const css::uno::Any& rVal, sal_uInt8 nMemberId) SAL_OVERRIDE; }; #endif diff --git a/include/tools/color.hxx b/include/tools/color.hxx index ea92187..15ba3df 100644 --- a/include/tools/color.hxx +++ b/include/tools/color.hxx @@ -156,8 +156,8 @@ public: bool operator!=( const Color& rColor ) const { return !(Color::operator==( rColor )); } - SvStream& Read( SvStream& rIStm, bool bNewFormat = true ); - SvStream& Write( SvStream& rOStm, bool bNewFormat = true ); + SvStream& Read(SvStream& rIStream, bool bNewFormat = true); + SvStream& Write(SvStream& rOStream, bool bNewFormat = true) const; TOOLS_DLLPUBLIC friend SvStream& ReadColor( SvStream& rIStream, Color& rColor ); TOOLS_DLLPUBLIC friend SvStream& WriteColor( SvStream& rOStream, const Color& rColor ); diff --git a/tools/source/generic/color.cxx b/tools/source/generic/color.cxx index cbdc6e4..07d43de 100644 --- a/tools/source/generic/color.cxx +++ b/tools/source/generic/color.cxx @@ -222,7 +222,7 @@ SvStream& Color::Read( SvStream& rIStm, bool bNewFormat ) return rIStm; } -SvStream& Color::Write( SvStream& rOStm, bool bNewFormat ) +SvStream& Color::Write( SvStream& rOStm, bool bNewFormat ) const { if ( bNewFormat ) rOStm.WriteUInt32( mnColor ); commit 4970009499a5dfb634b25dc144ee35bac0cf9d31 Author: Caolán McNamara <caol...@redhat.com> Date: Thu Aug 27 20:20:01 2015 +0100 don't loop on overly-short nEndPos Change-Id: I60d3388ece28a69c31a85b9e3b495cbe8a03e7dc (cherry picked from commit 42732d255423700461f4abadfed77d89efa9cdd0) Reviewed-on: https://gerrit.libreoffice.org/18084 Reviewed-by: Michael Meeks <michael.me...@collabora.com> Tested-by: Michael Meeks <michael.me...@collabora.com> diff --git a/vcl/qa/cppunit/graphicfilter/data/wmf/fail/hang-3.wmf b/vcl/qa/cppunit/graphicfilter/data/wmf/fail/hang-3.wmf new file mode 100644 index 0000000..80ad795 Binary files /dev/null and b/vcl/qa/cppunit/graphicfilter/data/wmf/fail/hang-3.wmf differ diff --git a/vcl/source/filter/wmf/enhwmf.cxx b/vcl/source/filter/wmf/enhwmf.cxx index 1b8dc0d..578fc0a 100644 --- a/vcl/source/filter/wmf/enhwmf.cxx +++ b/vcl/source/filter/wmf/enhwmf.cxx @@ -617,7 +617,7 @@ void EnhWMFReader::ReadAndDrawPolyPolygon() bool EnhWMFReader::ReadEnhWMF() { sal_uInt32 nStretchBltMode = 0; - sal_uInt32 nRecType(0), nRecSize(0), nNextPos(0), + sal_uInt32 nNextPos(0), nW(0), nH(0), nColor(0), nIndex(0), nDat32(0), nNom1(0), nDen1(0), nNom2(0), nDen2(0); sal_Int32 nX32(0), nY32(0), nx32(0), ny32(0); @@ -629,7 +629,8 @@ bool EnhWMFReader::ReadEnhWMF() while( bStatus && nRecordCount-- && pWMF->good()) { - pWMF->ReadUInt32( nRecType ).ReadUInt32( nRecSize ); + sal_uInt32 nRecType(0), nRecSize(0); + pWMF->ReadUInt32(nRecType).ReadUInt32(nRecSize); if ( !pWMF->good() || ( nRecSize < 8 ) || ( nRecSize & 3 ) ) // Parameters are always divisible by 4 { @@ -637,14 +638,22 @@ bool EnhWMFReader::ReadEnhWMF() break; } - const sal_uInt32 nMaxPossibleRecSize = nEndPos - pWMF->Tell() + 8; + auto nCurPos = pWMF->Tell(); + + if (nEndPos < nCurPos - 8) + { + bStatus = false; + break; + } + + const sal_uInt32 nMaxPossibleRecSize = nEndPos - (nCurPos - 8); if (nRecSize > nMaxPossibleRecSize) { bStatus = false; break; } - nNextPos = pWMF->Tell() + ( nRecSize - 8 ); + nNextPos = nCurPos + (nRecSize - 8); if( !aBmpSaveList.empty() && ( nRecType != EMR_STRETCHBLT ) @@ -1407,7 +1416,7 @@ bool EnhWMFReader::ReadEnhWMF() case EMR_EXTTEXTOUTW : { sal_Int32 nLeft, nTop, nRight, nBottom, ptlReferenceX, ptlReferenceY, nGfxMode, nXScale, nYScale; - sal_uInt32 nCurPos, nOffString, nOptions, offDx; + sal_uInt32 nOffString, nOptions, offDx; sal_Int32 nLen; std::vector<long> aDX;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits