------------------------------------------------------------ revno: 2070 committer: Rene Engelhard <r...@debian.org> branch nick: debian timestamp: Thu 2010-08-19 10:21:15 +0200 message: add fix for SA40775 added: patches/SA40775.diff modified: changelog patches/series
=== modified file 'changelog' --- a/changelog 2010-08-18 20:05:11 +0000 +++ b/changelog 2010-08-19 08:21:15 +0000 @@ -1,4 +1,4 @@ -openoffice.org (1:3.2.1-6) UNRELEASED; urgency=low +openoffice.org (1:3.2.1-6) UNRELEASED; urgency=high * debian/patches/reduce-height-on-dialogs-for-netbooks.diff: add patch from ooo-build-3-2-1 branch to reduce the PDF export and Recovery @@ -7,6 +7,8 @@ (closes: #593440) * debian/patches/shift-translations.diff: some translations must be shifted in the itemlist; backported from ooo-build-3-2-1 branch (closes: #593234) + * debian/patches/SA40775.diff: fix CVE-2010-2935 and CVE-2010-2936 + aka SA40775: two buffer-overflow vulnerabilities in OpenOffice.org Impress * merge from Ubuntu (thanks Loic Minier): - Pass the same -v to "dh_makeshlibs --" (for dpkg-gensymbols) as to
=== added file 'patches/SA40775.diff' --- a/patches/SA40775.diff 1970-01-01 00:00:00 +0000 +++ b/patches/SA40775.diff 2010-08-19 08:21:15 +0000 @@ -0,0 +1,225 @@ +--- /dev/null 2010-08-16 13:41:41.277183513 +0200 ++++ openoffice.org-3.2.1/ooo-build-3-2-1-4/patches/dev300/SA40775.diff 2010-08-17 18:54:25.000000000 +0200 +@@ -0,0 +1,204 @@ ++diff -r 5b1ceed28385 sd/source/filter/ppt/propread.cxx ++--- sd/source/filter/ppt/propread.cxx Fri Aug 06 14:53:07 2010 +0200 +++++ sd/source/filter/ppt/propread.cxx Mon Aug 09 14:04:21 2010 +0200 ++@@ -29,6 +29,7 @@ ++ #include "precompiled_sd.hxx" ++ #include <propread.hxx> ++ #include <tools/bigint.hxx> +++#include "tools/debug.hxx" ++ #include "rtl/tencinfo.h" ++ #include "rtl/textenc.h" ++ ++@@ -90,6 +91,17 @@ ++ ++ // ----------------------------------------------------------------------- ++ +++static xub_StrLen lcl_getMaxSafeStrLen(sal_uInt32 nSize) +++{ +++ nSize -= 1; //Drop NULL terminator +++ +++ //If it won't fit in a string, clip it to the max size that does +++ if (nSize > STRING_MAXLEN) +++ nSize = STRING_MAXLEN; +++ +++ return nSize; +++} +++ ++ BOOL PropItem::Read( String& rString, sal_uInt32 nStringType, sal_Bool bAlign ) ++ { ++ sal_uInt32 i, nItemSize, nType, nItemPos; ++@@ -108,36 +120,43 @@ ++ { ++ case VT_LPSTR : ++ { ++- if ( (sal_uInt16)nItemSize ) +++ if ( nItemSize ) ++ { ++- sal_Char* pString = new sal_Char[ (sal_uInt16)nItemSize ]; ++- if ( mnTextEnc == RTL_TEXTENCODING_UCS2 ) +++ try ++ { ++- nItemSize >>= 1; ++- if ( (sal_uInt16)nItemSize > 1 ) +++ sal_Char* pString = new sal_Char[ nItemSize ]; +++ if ( mnTextEnc == RTL_TEXTENCODING_UCS2 ) ++ { ++- sal_Unicode* pWString = (sal_Unicode*)pString; ++- for ( i = 0; i < (sal_uInt16)nItemSize; i++ ) ++- *this >> pWString[ i ]; ++- rString = String( pWString, (sal_uInt16)nItemSize - 1 ); ++- } ++- else ++- rString = String(); ++- bRetValue = sal_True; ++- } ++- else ++- { ++- SvMemoryStream::Read( pString, (sal_uInt16)nItemSize ); ++- if ( pString[ (sal_uInt16)nItemSize - 1 ] == 0 ) ++- { ++- if ( (sal_uInt16)nItemSize > 1 ) ++- rString = String( ByteString( pString ), mnTextEnc ); +++ nItemSize >>= 1; +++ if ( nItemSize > 1 ) +++ { +++ sal_Unicode* pWString = (sal_Unicode*)pString; +++ for ( i = 0; i < nItemSize; i++ ) +++ *this >> pWString[ i ]; +++ rString = String( pWString, lcl_getMaxSafeStrLen(nItemSize) ); +++ } ++ else ++ rString = String(); ++ bRetValue = sal_True; ++ } +++ else +++ { +++ SvMemoryStream::Read( pString, nItemSize ); +++ if ( pString[ nItemSize - 1 ] == 0 ) +++ { +++ if ( nItemSize > 1 ) +++ rString = String( ByteString( pString ), mnTextEnc ); +++ else +++ rString = String(); +++ bRetValue = sal_True; +++ } +++ } +++ delete[] pString; ++ } ++- delete[] pString; +++ catch( const std::bad_alloc& ) +++ { +++ DBG_ERROR( "sd PropItem::Read bad alloc" ); +++ } ++ } ++ if ( bAlign ) ++ SeekRel( ( 4 - ( nItemSize & 3 ) ) & 3 ); // dword align ++@@ -148,18 +167,25 @@ ++ { ++ if ( nItemSize ) ++ { ++- sal_Unicode* pString = new sal_Unicode[ (sal_uInt16)nItemSize ]; ++- for ( i = 0; i < (sal_uInt16)nItemSize; i++ ) ++- *this >> pString[ i ]; ++- if ( pString[ i - 1 ] == 0 ) +++ try ++ { ++- if ( (sal_uInt16)nItemSize > 1 ) ++- rString = String( pString, (sal_uInt16)nItemSize - 1 ); ++- else ++- rString = String(); ++- bRetValue = sal_True; +++ sal_Unicode* pString = new sal_Unicode[ nItemSize ]; +++ for ( i = 0; i < nItemSize; i++ ) +++ *this >> pString[ i ]; +++ if ( pString[ i - 1 ] == 0 ) +++ { +++ if ( (sal_uInt16)nItemSize > 1 ) +++ rString = String( pString, lcl_getMaxSafeStrLen(nItemSize) ); +++ else +++ rString = String(); +++ bRetValue = sal_True; +++ } +++ delete[] pString; ++ } ++- delete[] pString; +++ catch( const std::bad_alloc& ) +++ { +++ DBG_ERROR( "sd PropItem::Read bad alloc" ); +++ } ++ } ++ if ( bAlign && ( nItemSize & 1 ) ) ++ SeekRel( 2 ); // dword align ++@@ -349,24 +375,31 @@ ++ for ( sal_uInt32 i = 0; i < nDictCount; i++ ) ++ { ++ aStream >> nId >> nSize; ++- if ( (sal_uInt16)nSize ) +++ if ( nSize ) ++ { ++ String aString; ++ nPos = aStream.Tell(); ++- sal_Char* pString = new sal_Char[ (sal_uInt16)nSize ]; ++- aStream.Read( pString, (sal_uInt16)nSize ); ++- if ( mnTextEnc == RTL_TEXTENCODING_UCS2 ) +++ try ++ { ++- nSize >>= 1; ++- aStream.Seek( nPos ); ++- sal_Unicode* pWString = (sal_Unicode*)pString; ++- for ( i = 0; i < (sal_uInt16)nSize; i++ ) ++- aStream >> pWString[ i ]; ++- aString = String( pWString, (sal_uInt16)nSize - 1 ); +++ sal_Char* pString = new sal_Char[ nSize ]; +++ aStream.Read( pString, nSize ); +++ if ( mnTextEnc == RTL_TEXTENCODING_UCS2 ) +++ { +++ nSize >>= 1; +++ aStream.Seek( nPos ); +++ sal_Unicode* pWString = (sal_Unicode*)pString; +++ for ( i = 0; i < nSize; i++ ) +++ aStream >> pWString[ i ]; +++ aString = String( pWString, lcl_getMaxSafeStrLen(nSize) ); +++ } +++ else +++ aString = String( ByteString( pString, lcl_getMaxSafeStrLen(nSize) ), mnTextEnc ); +++ delete[] pString; ++ } ++- else ++- aString = String( ByteString( pString, (sal_uInt16)nSize - 1 ), mnTextEnc ); ++- delete[] pString; +++ catch( const std::bad_alloc& ) +++ { +++ DBG_ERROR( "sd Section::GetDictionary bad alloc" ); +++ } ++ if ( !aString.Len() ) ++ break; ++ aDict.AddProperty( nId, aString ); ++@@ -502,6 +502,11 @@ ++ } ++ if ( nPropSize ) ++ { +++ if ( nPropSize > nStrmSize ) +++ { +++ nPropCount = 0; +++ break; +++ } ++ pStrm->Seek( nPropOfs + nSecOfs ); ++ // make sure we don't overflow the section size ++ if( nPropSize > nSecSize - nSecOfs ) ++diff -r 5b1ceed28385 tools/source/generic/poly.cxx ++--- tools/source/generic/poly.cxx Fri Aug 06 14:53:07 2010 +0200 +++++ tools/source/generic/poly.cxx Mon Aug 09 14:04:21 2010 +0200 ++@@ -243,6 +243,11 @@ ++ void ImplPolygon::ImplSplit( USHORT nPos, USHORT nSpace, ImplPolygon* pInitPoly ) ++ { ++ const ULONG nSpaceSize = nSpace * sizeof( Point ); +++ +++ //Can't fit this in :-(, throw ? +++ if (mnPoints + nSpace > USHRT_MAX) +++ return; +++ ++ const USHORT nNewSize = mnPoints + nSpace; ++ ++ if( nPos >= mnPoints ) ++ +--- openoffice.org-3.2.1/ooo-build-3-2-1-4/patches/dev300/apply 2010-08-17 18:59:01.000000000 +0200 ++++ openoffice.org-3.2.1/ooo-build-3-2-1-4/patches/dev300/apply 2010-08-17 18:59:19.000000000 +0200 +@@ -19,7 +19,7 @@ + PopupRemoval, LinkWarningDlg, InternalCairo, Lockdown, \ + FedoraCommonFixes, InternalMesaHeaders, LayoutDialogs, Fuzz, \ + CalcRowLimit, Gcc44, Gcc45, BuildFix, WriterDocComparison, \ +- OptionalIconThemes, Toolbars, MySQL, BorderTypes ++ OptionalIconThemes, Toolbars, MySQL, BorderTypes, Security + + LinuxCommon : Common, Defaults, TangoIcons, FontConfigTemporaryHacks, \ + FedoraLinuxOnlyFixes, LinuxOnly, SystemBits, \ +@@ -4070,3 +4070,6 @@ + + [ OpenGLTransitions ] + transogl-transitions-newsflash-pptin.diff ++ ++[ Security ] ++SA40775.diff === modified file 'patches/series' --- a/patches/series 2010-08-18 20:05:11 +0000 +++ b/patches/series 2010-08-19 08:21:15 +0000 @@ -8,3 +8,4 @@ reduce-height-on-dialogs-for-netbooks.diff regcomp-fix-spelling.diff shift-translations.diff +SA40775.diff