summaryrefslogtreecommitdiff
path: root/basic
diff options
context:
space:
mode:
authorAndreas Heinisch <andreas.heinisch@yahoo.de>2023-03-29 12:01:07 +0200
committerAndreas Heinisch <andreas.heinisch@yahoo.de>2023-07-24 13:55:28 +0200
commit17154ceafe4b96b43fdc9994736e378d6a11f3e4 (patch)
treedee212ca1cd459f1e10dc06b87edc1c44f3a8d35 /basic
parent5a82470f27898c8b453e63d3ee22d0b57f7836c8 (diff)
tdf#92620 - Adjust error message about exceeding legacy module size
Adjusted the error message about exceeding legacy module size and removed the code for saving image version 11. Modules using image version 11 still can be loaded. Saving modules always result in an image version higher than image version 11 depending on the size of the module. In addition, some minor performance issues (construction of the error message and the correct list of modules) were fixed. Change-Id: I3bde9fcc1596b63446193c836fa7b5cb06eb7d97 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149687 Tested-by: Jenkins Reviewed-by: Andreas Heinisch <andreas.heinisch@yahoo.de>
Diffstat (limited to 'basic')
-rw-r--r--basic/source/basmgr/basmgr.cxx13
-rw-r--r--basic/source/classes/image.cxx40
-rw-r--r--basic/source/classes/sbxmod.cxx4
-rw-r--r--basic/source/inc/filefmt.hxx1
-rw-r--r--basic/source/inc/image.hxx1
-rw-r--r--basic/source/uno/scriptcont.cxx2
6 files changed, 18 insertions, 43 deletions
diff --git a/basic/source/basmgr/basmgr.cxx b/basic/source/basmgr/basmgr.cxx
index 206b917b7edd..f7a4fb2ae192 100644
--- a/basic/source/basmgr/basmgr.cxx
+++ b/basic/source/basmgr/basmgr.cxx
@@ -1390,7 +1390,7 @@ void BasicManager::SetGlobalUNOConstant( const OUString& rName, const uno::Any&
pStandardLib->Insert( xUnoObj.get() );
}
-bool BasicManager::LegacyPsswdBinaryLimitExceeded( std::vector< OUString >& _out_rModuleNames )
+bool BasicManager::ImgVersion12PsswdBinaryLimitExceeded( std::vector< OUString >& _out_rModuleNames )
{
try
{
@@ -1409,19 +1409,16 @@ bool BasicManager::LegacyPsswdBinaryLimitExceeded( std::vector< OUString >& _out
uno::Reference< container::XNameAccess > xScriptLibrary( xScripts->getByName( scriptElementName ), uno::UNO_QUERY_THROW );
const uno::Sequence< OUString > aElementNames( xScriptLibrary->getElementNames() );
- sal_Int32 nLen = aElementNames.getLength();
-
- std::vector< OUString > aBigModules( nLen );
- sal_Int32 nBigModules = 0;
+ std::vector<OUString> aBigModules;
for ( auto const & libraryElementName : aElementNames )
{
SbModule* pMod = pBasicLib->FindModule( libraryElementName );
- if ( pMod && pMod->ExceedsLegacyModuleSize() )
- aBigModules[ nBigModules++ ] = libraryElementName;
+ if ( pMod && pMod->ExceedsImgVersion12ModuleSize() )
+ aBigModules.push_back(libraryElementName);
}
- if ( nBigModules )
+ if (!aBigModules.empty())
{
_out_rModuleNames.swap(aBigModules);
return true;
diff --git a/basic/source/classes/image.cxx b/basic/source/classes/image.cxx
index eab5fe9e0905..ee490947029e 100644
--- a/basic/source/classes/image.cxx
+++ b/basic/source/classes/image.cxx
@@ -373,31 +373,13 @@ done:
bool SbiImage::Save( SvStream& r, sal_uInt32 nVer )
{
- bool bLegacy = ( nVer < B_IMG_VERSION_12 );
-
- // detect if old code exceeds legacy limits
- // if so, then disallow save
- if ( bLegacy && ExceedsLegacyLimits() )
- {
- SbiImage aEmptyImg;
- aEmptyImg.aName = aName;
- aEmptyImg.Save( r, B_IMG_VERSION_11 );
- return true;
- }
// First of all the header
sal_uInt64 nStart = SbiOpenRecord( r, FileOffset::Module, 1 );
sal_uInt64 nPos;
eCharSet = GetSOStoreTextEncoding( eCharSet );
- if ( bLegacy )
- {
- r.WriteInt32( B_IMG_VERSION_11 );
- }
- else
- {
- r.WriteInt32( nVer );
- }
- r .WriteInt32( eCharSet )
+ r .WriteInt32( nVer )
+ .WriteInt32( eCharSet )
.WriteInt32( nDimBase )
.WriteInt16( static_cast<sal_uInt16>(nFlags) )
.WriteInt16( 0 )
@@ -429,17 +411,7 @@ bool SbiImage::Save( SvStream& r, sal_uInt32 nVer )
if (aCode.size() && r.good())
{
nPos = SbiOpenRecord( r, FileOffset::PCode, 1 );
- if ( bLegacy )
- {
- PCodeBuffConvertor<sal_uInt32, sal_uInt16> aNewToLegacy(aCode.data(), aCode.size());
- aNewToLegacy.convert();
- aLegacyPCode = aNewToLegacy.GetBuffer();
- r.WriteBytes(aLegacyPCode.data(), aLegacyPCode.size());
- }
- else
- {
- r.WriteBytes(aCode.data(), aCode.size());
- }
+ r.WriteBytes(aCode.data(), aCode.size());
SbiCloseRecord( r, nPos );
}
// String-Pool?
@@ -715,4 +687,10 @@ bool SbiImage::ExceedsLegacyLimits()
return (nStringSize > 0xFF00) || (CalcLegacyOffset(aCode.size()) > 0xFF00);
}
+bool SbiImage::ExceedsImgVersion12Limits()
+{
+ const sal_Int16 nMax = std::numeric_limits<sal_Int16>::max();
+ return nStringSize >= nMax || CalcLegacyOffset(aCode.size()) >= nMax;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx
index 5b7ee24e1f9c..15e4719569ba 100644
--- a/basic/source/classes/sbxmod.cxx
+++ b/basic/source/classes/sbxmod.cxx
@@ -1667,11 +1667,11 @@ std::pair<bool, sal_uInt32> SbModule::StoreData( SvStream& rStrm ) const
}
}
-bool SbModule::ExceedsLegacyModuleSize()
+bool SbModule::ExceedsImgVersion12ModuleSize()
{
if ( !IsCompiled() )
Compile();
- return pImage && pImage->ExceedsLegacyLimits();
+ return pImage && pImage->ExceedsImgVersion12Limits();
}
namespace {
diff --git a/basic/source/inc/filefmt.hxx b/basic/source/inc/filefmt.hxx
index b04b7abc6a9b..38dfa95754f3 100644
--- a/basic/source/inc/filefmt.hxx
+++ b/basic/source/inc/filefmt.hxx
@@ -45,7 +45,6 @@
// new integer type suffix 'b')
//
-#define B_IMG_VERSION_11 0x00000011
#define B_IMG_VERSION_12 0x00000012
#define B_IMG_VERSION_13 0x00000013
diff --git a/basic/source/inc/image.hxx b/basic/source/inc/image.hxx
index 2e442398a214..5a4522bd91bf 100644
--- a/basic/source/inc/image.hxx
+++ b/basic/source/inc/image.hxx
@@ -96,6 +96,7 @@ public:
sal_uInt32 CalcNewOffset( sal_Int16 nOffset );
void ReleaseLegacyBuffer();
bool ExceedsLegacyLimits();
+ bool ExceedsImgVersion12Limits();
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basic/source/uno/scriptcont.cxx b/basic/source/uno/scriptcont.cxx
index 7c059ff66d7b..f534856dc11b 100644
--- a/basic/source/uno/scriptcont.cxx
+++ b/basic/source/uno/scriptcont.cxx
@@ -572,7 +572,7 @@ bool SfxScriptLibraryContainer::implStorePasswordLibrary( SfxLibrary* pLib, cons
// save/saveas etc are handled in sfxbasemodel::storeSelf &
// sfxbasemodel::impl_store
std::vector<OUString> aNames;
- if ( bExport && pBasicMgr->LegacyPsswdBinaryLimitExceeded(aNames) )
+ if ( bExport && pBasicMgr->ImgVersion12PsswdBinaryLimitExceeded(aNames) )
{
if ( xHandler.is() )
{