Index: unoobj.cxx =================================================================== RCS file: /cvs/sw/sw/source/core/unocore/unoobj.cxx,v retrieving revision 1.97 diff -c -r1.97 unoobj.cxx *** unoobj.cxx 16 Sep 2006 21:58:20 -0000 1.97 --- unoobj.cxx 24 Oct 2006 08:49:15 -0000 *************** *** 451,478 **** long lLen; if( !IsError( aWriter.Write( xWrt ) ) && ! STRING_MAXLEN > (( lLen = aStream.GetSize() ) / sizeof( sal_Unicode )) + 1 ) { aStream << (sal_Unicode)'\0'; ! String sBuf; ! const sal_Unicode *p = (sal_Unicode*)aStream.GetBuffer(); ! if( p ) ! sBuf = p; ! else { ! long lUniLen = (lLen / sizeof( sal_Unicode )); ! sal_Unicode* pStrBuf = sBuf.AllocBuffer( xub_StrLen( ! lUniLen)); ! aStream.Seek( 0 ); ! aStream.ResetError(); ! aStream.Read( pStrBuf, lLen ); ! pStrBuf[ lUniLen ] = '\0'; } ! rBuffer = OUString( sBuf ); } - xWrt->bShowProgress = bOldShowProgress; } } --- 451,481 ---- long lLen; if( !IsError( aWriter.Write( xWrt ) ) && ! 0x7ffffff > (( lLen = aStream.GetSize() ) / sizeof( sal_Unicode )) + 1 ) { aStream << (sal_Unicode)'\0'; ! long lUniLen = (lLen / sizeof( sal_Unicode )); ! ::rtl::OUStringBuffer aStrBuffer( lUniLen ); ! aStream.Seek( 0 ); ! aStream.ResetError(); ! while(lUniLen) { ! String sBuf; ! sal_Int32 nLocalLen = 0; ! if( lUniLen >= STRING_MAXLEN ) ! nLocalLen = STRING_MAXLEN - 1; ! else ! nLocalLen = lUniLen; ! sal_Unicode* pStrBuf = sBuf.AllocBuffer( xub_StrLen( nLocalLen )); ! aStream.Read( pStrBuf, 2 * nLocalLen ); ! pStrBuf[ nLocalLen ] = '\0'; ! aStrBuffer.append( pStrBuf, nLocalLen ); ! lUniLen -= nLocalLen; } ! rBuffer = aStrBuffer.makeStringAndClear(); } xWrt->bShowProgress = bOldShowProgress; } }