summaryrefslogtreecommitdiffstats
path: root/sot/source/sdstor
diff options
context:
space:
mode:
Diffstat (limited to 'sot/source/sdstor')
-rw-r--r--sot/source/sdstor/stgdir.cxx5
-rw-r--r--sot/source/sdstor/stgstrms.cxx2
-rw-r--r--sot/source/sdstor/storage.cxx155
-rw-r--r--sot/source/sdstor/ucbstorage.cxx12
4 files changed, 7 insertions, 167 deletions
diff --git a/sot/source/sdstor/stgdir.cxx b/sot/source/sdstor/stgdir.cxx
index 4951daa70a6c..fc9610a6af3b 100644
--- a/sot/source/sdstor/stgdir.cxx
+++ b/sot/source/sdstor/stgdir.cxx
@@ -853,7 +853,10 @@ void StgDirStrm::SetupEntry( sal_Int32 n, StgDirEntry* pUpper )
}
else
{
- rIo.SetError( SVSTREAM_CANNOT_MAKE );
+ // bnc#682484: There are some really broken docs out there
+ // that contain duplicate entries in 'Directory' section
+ // so don't set the error flag here and just skip those
+ // (was: rIo.SetError( SVSTREAM_CANNOT_MAKE );)
delete pCur; pCur = NULL;
return;
}
diff --git a/sot/source/sdstor/stgstrms.cxx b/sot/source/sdstor/stgstrms.cxx
index fe40be155b9e..48e8de3ede6d 100644
--- a/sot/source/sdstor/stgstrms.cxx
+++ b/sot/source/sdstor/stgstrms.cxx
@@ -798,7 +798,7 @@ void* StgDataStrm::GetPtr( sal_Int32 Pos, sal_Bool bForce, sal_Bool bDirty )
if( Pos2Page( Pos ) )
{
StgPage* pPg = rIo.Get( nPage, bForce );
- if( pPg )
+ if (pPg && nOffset < pPg->GetSize())
{
pPg->SetOwner( pEntry );
if( bDirty )
diff --git a/sot/source/sdstor/storage.cxx b/sot/source/sdstor/storage.cxx
index ef398d081904..50a30d89b45e 100644
--- a/sot/source/sdstor/storage.cxx
+++ b/sot/source/sdstor/storage.cxx
@@ -744,129 +744,6 @@ void SotStorage::RemoveUNOStorageHolder( UNOStorageHolder* pHolder )
}
/*************************************************************************
-|* SotStorage::GetUNOAPIDuplicate()
-|*
-|* Beschreibung
-*************************************************************************/
-uno::Reference< embed::XStorage > SotStorage::GetUNOAPIDuplicate( const String& rEleName, sal_Int32 nUNOStorageMode )
-{
- // after we create a duplicate we will register wrapper
- // for storage messages, the wrapper will control the real storage
- // the real storage will be able to ask the duplicate to dispose if it's parent is disposed
-
- uno::Reference< embed::XStorage > xResult;
-
- UCBStorage* pStg = PTR_CAST( UCBStorage, m_pOwnStg );
- if ( !pStg )
- return xResult;
-
- UNOStorageHolderList* pUNOStorageHolderList = pStg->GetUNOStorageHolderList();
- if ( !pUNOStorageHolderList )
- return xResult;
-
- for ( UNOStorageHolderList::iterator aIter = pUNOStorageHolderList->begin();
- aIter != pUNOStorageHolderList->end(); ++aIter )
- if ( (*aIter) && (*aIter)->GetStorageName().Equals( rEleName ) )
- {
- // the storage is already in use
- return xResult;
- }
-
- if ( IsStream( rEleName ) )
- return xResult;
-
- if ( GetError() == ERRCODE_NONE )
- {
- StreamMode nMode = ( ( nUNOStorageMode & embed::ElementModes::WRITE ) == embed::ElementModes::WRITE ) ?
- STREAM_WRITE : ( STREAM_READ | STREAM_NOCREATE );
- if ( nUNOStorageMode & embed::ElementModes::NOCREATE )
- nMode |= STREAM_NOCREATE;
-
- sal_Bool bStorageReady = !IsStorage( rEleName );
- SotStorageRef pChildStorage = OpenUCBStorage( rEleName, nMode, STORAGE_TRANSACTED );
- if ( pChildStorage->GetError() == ERRCODE_NONE && pChildStorage->m_pOwnStg )
- {
- ::utl::TempFile* pTempFile = new ::utl::TempFile();
- if ( pTempFile->GetURL().Len() )
- {
- if ( !bStorageReady )
- {
- UCBStorage* pChildUCBStg = PTR_CAST( UCBStorage, pChildStorage->m_pOwnStg );
- if ( pChildUCBStg )
- {
- UCBStorage* pTempStorage = new UCBStorage( pTempFile->GetURL(), STREAM_WRITE, sal_False, sal_True );
- if ( pTempStorage )
- {
- pChildUCBStg->CopyTo( pTempStorage );
-
- // CopyTo does not transport unknown media type
- // just workaround it
- uno::Any aMediaType;
-
- if ( pChildUCBStg->GetProperty(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MediaType")), aMediaType ) )
- pTempStorage->SetProperty( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MediaType")), aMediaType );
-
- bStorageReady = !pChildUCBStg->GetError() && !pTempStorage->GetError()
- && pTempStorage->Commit();
-
- delete ((BaseStorage*)pTempStorage);
- pTempStorage = NULL;
- }
- }
-
- OSL_ENSURE( bStorageReady, "Problem on storage copy!\n" );
- }
-
- if ( bStorageReady )
- {
- try {
- uno::Reference< lang::XSingleServiceFactory > xStorageFactory(
- ::comphelper::getProcessServiceFactory()->createInstance(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.embed.StorageFactory")) ),
- uno::UNO_QUERY );
-
- OSL_ENSURE( xStorageFactory.is(), "Can't create storage factory!\n" );
- if ( xStorageFactory.is() )
- {
- uno::Sequence< uno::Any > aArg( 2 );
- aArg[0] <<= ::rtl::OUString( pTempFile->GetURL() );
- aArg[1] <<= nUNOStorageMode;
- uno::Reference< embed::XStorage > xDuplStorage(
- xStorageFactory->createInstanceWithArguments( aArg ),
- uno::UNO_QUERY );
-
- OSL_ENSURE( xDuplStorage.is(), "Can't open storage!\n" );
- if ( xDuplStorage.is() )
- {
- UNOStorageHolder* pHolder =
- new UNOStorageHolder( *this, *pChildStorage, xDuplStorage, pTempFile );
- pHolder->acquire();
- pTempFile = NULL;
- pUNOStorageHolderList->push_back( pHolder );
- xResult = xDuplStorage;
- }
- }
- }
- catch( uno::Exception& e )
- {
- (void)e;
- OSL_FAIL( ::rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_ASCII_US ) );
- }
- }
- }
-
- if ( pTempFile != NULL )
- delete pTempFile;
- }
- else
- SetError( pChildStorage->GetError() );
- }
-
- return xResult;
-}
-
-/*************************************************************************
|* SotStorage::CreateMemoryStream()
|*
|* Beschreibung
@@ -1110,38 +987,6 @@ sal_Bool SotStorage::Revert()
return SVSTREAM_OK == GetError();
}
-/*************************************************************************
-|* SotStorage::OpenStream()
-|*
-|* Beschreibung
-*************************************************************************/
-SotStorageStream * SotStorage::OpenEncryptedSotStream( const String & rEleName, const ByteString& rKey,
- StreamMode nMode,
- StorageMode nStorageMode )
-{
- DBG_ASSERT( !nStorageMode, "StorageModes ignored" );
- SotStorageStream * pStm = NULL;
- DBG_ASSERT( Owner(), "must be owner" );
- if( m_pOwnStg )
- {
- // volle Ole-Patches einschalten
- // egal was kommt, nur exclusiv gestattet
- nMode |= STREAM_SHARE_DENYALL;
- ErrCode nE = m_pOwnStg->GetError();
- BaseStorageStream* p = m_pOwnStg->OpenStream( rEleName, nMode,
- (nStorageMode & STORAGE_TRANSACTED) ? sal_False : sal_True, &rKey );
- pStm = new SotStorageStream( p );
-
- if( !nE )
- m_pOwnStg->ResetError(); // kein Fehler setzen
- if( nMode & STREAM_TRUNC )
- pStm->SetSize( 0 );
- }
- else
- SetError( SVSTREAM_GENERALERROR );
- return pStm;
-}
-
SotStorageStream * SotStorage::OpenSotStream( const String & rEleName,
StreamMode nMode,
StorageMode nStorageMode )
diff --git a/sot/source/sdstor/ucbstorage.cxx b/sot/source/sdstor/ucbstorage.cxx
index 198a6572dec3..dfc5024889a3 100644
--- a/sot/source/sdstor/ucbstorage.cxx
+++ b/sot/source/sdstor/ucbstorage.cxx
@@ -1336,15 +1336,6 @@ void UCBStorageStream_Impl::PrepareCachedForReopen( StreamMode nMode )
}
}
-UCBStorageStream::UCBStorageStream( const String& rName, StreamMode nMode, sal_Bool bDirect, const ByteString* pKey )
-{
- // pImp must be initialized in the body, because otherwise the vtable of the stream is not initialized
- // to class UCBStorageStream !
- pImp = new UCBStorageStream_Impl( rName, nMode, this, bDirect, pKey );
- pImp->AddRef(); // use direct refcounting because in header file only a pointer should be used
- StorageBase::m_nMode = pImp->m_nMode;
-}
-
UCBStorageStream::UCBStorageStream( const String& rName, StreamMode nMode, sal_Bool bDirect, const ByteString* pKey, sal_Bool bRepair, Reference< XProgressHandler > xProgress )
{
// pImp must be initialized in the body, because otherwise the vtable of the stream is not initialized
@@ -3275,7 +3266,7 @@ sal_Bool UCBStorage::IsStorageFile( SvStream* pFile )
return sal_False;
pFile->Seek(0);
- sal_uInt32 nBytes;
+ sal_uInt32 nBytes(0);
*pFile >> nBytes;
// search for the magic bytes
@@ -3286,6 +3277,7 @@ sal_Bool UCBStorage::IsStorageFile( SvStream* pFile )
bRet = ( nBytes == 0x08074b50 );
if ( bRet )
{
+ nBytes = 0;
*pFile >> nBytes;
bRet = ( nBytes == 0x04034b50 );
}