[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

./packages/openofficeorg/3.2.1/unstable r2070: add fix for SA40775



------------------------------------------------------------
revno: 2070
committer: Rene Engelhard <rene@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


Reply to: