diff options
Diffstat (limited to 'sfx2/source/doc/objstor.cxx')
-rw-r--r-- | sfx2/source/doc/objstor.cxx | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx index b865ce456b7d..4b58cbe14ecb 100644 --- a/sfx2/source/doc/objstor.cxx +++ b/sfx2/source/doc/objstor.cxx @@ -986,6 +986,39 @@ bool SfxObjectShell::DoSave() pImpl->bIsSaving = true; + if (IsOwnStorageFormat(*GetMedium())) + { + SvtSaveOptions::ODFSaneDefaultVersion nDefVersion = SvtSaveOptions::ODFSVER_012; + if (!utl::ConfigManager::IsFuzzing()) + { + SvtSaveOptions aSaveOpt; + nDefVersion = aSaveOpt.GetODFSaneDefaultVersion(); + } + uno::Reference<beans::XPropertySet> const xProps(GetMedium()->GetStorage(), uno::UNO_QUERY); + assert(xProps.is()); + if (nDefVersion >= SvtSaveOptions::ODFSVER_012) // property exists only since ODF 1.2 + { + try // tdf#134582 set Version on embedded objects as they + { // could have been loaded with a different/old version +#if 0 +// not on old branch + if (SvtSaveOptions::ODFSVER_013 <= nDefVersion) + { + xProps->setPropertyValue("Version", uno::makeAny<OUString>(ODFVER_013_TEXT)); + } + else +#endif + { + xProps->setPropertyValue("Version", uno::makeAny<OUString>(ODFVER_012_TEXT)); + } + } + catch (uno::Exception&) + { + DBG_UNHANDLED_EXCEPTION("sfx.doc" /*, "SfxObjectShell::DoSave"*/); + } + } + } + uno::Sequence< beans::NamedValue > aEncryptionData; if ( IsPackageStorageFormat_Impl( *GetMedium() ) ) { @@ -1121,6 +1154,8 @@ bool SfxObjectShell::SaveTo_Impl UpdateDocInfoForSave(); ModifyBlocker_Impl aMod(this); + // tdf#41063, tdf#135244: prevent jumping to cursor at any temporary modification + auto aViewGuard(LockAllViews()); std::shared_ptr<const SfxFilter> pFilter = rMedium.GetFilter(); if ( !pFilter ) |