Hi, I have submitted a patch for review:
https://gerrit.libreoffice.org/3347 To pull it, you can do: git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/47/3347/1 Resolves: fdo#48039 use same algorithm for assigning get/set replacement ids i.e. use the same algorithm for assigning replacement ids for both get and set exp fields. Otherwise, consider for ex. 1. fields exists with ids of 1 and 2 in master document 2. a field exists with id of 1 in subdocument and must be reassigned a new id to not collide with the pre existing master ids In get orig algorithm assigned first unused slot of master to subdocument field i.e. 0 unused in master, so subdocument:1 converted to master:0 In set orig algorithm sorted all used master slots and assigned largest used id plus 1 (therefore unused) to subdocument field i.e. largest id used in master is 2, so subdocument:1 converted to master:3 so get can't find set and error's out with: Error: Reference source not found Change-Id: Ie8758dc22cf8deeeeff079532284e57eeaf4a9bd (cherry picked from commit 74d942fb2396a268adfcc915e75b8b32fae851dc) --- M sw/source/core/fields/reffld.cxx 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/sw/source/core/fields/reffld.cxx b/sw/source/core/fields/reffld.cxx index 79b076b..71b1902 100644 --- a/sw/source/core/fields/reffld.cxx +++ b/sw/source/core/fields/reffld.cxx @@ -1007,14 +1007,9 @@ GetFieldIdsFromDoc( rDestDoc, aIds ); GetFieldIdsFromDoc( rDoc, aDstIds ); - // Define the mappings now - sal_uInt16 nMaxDstId = -1; - if ( !aIds.empty() ) - nMaxDstId = *aIds.rbegin(); - - // Map all the src fields to their value + nMaxDstId + // Map all the new src fields to the next available unused id for ( std::set<sal_uInt16>::iterator pIt = aDstIds.begin(); pIt != aDstIds.end(); ++pIt ) - AddId( ++nMaxDstId, *pIt ); + AddId( GetFirstUnusedId(aIds), *pIt ); // Change the Sequence number of all the SetExp fields in the destination document SwFieldType* pType = rDoc.GetFldType( RES_SETEXPFLD, aName, false ); @@ -1037,9 +1032,9 @@ bInit = sal_True; } -/// Get the lowest unused ID in the passed set. +/// Get the lowest number unused in the passed set. /// @param[in] rIds The set of used ID numbers. -/// @returns The lowest unused ID. +/// @returns The lowest number unused by the passed set sal_uInt16 _RefIdsMap::GetFirstUnusedId( std::set<sal_uInt16> &rIds ) { sal_uInt16 num(0); -- To view, visit https://gerrit.libreoffice.org/3347 To unsubscribe, visit https://gerrit.libreoffice.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie8758dc22cf8deeeeff079532284e57eeaf4a9bd Gerrit-PatchSet: 1 Gerrit-Project: core Gerrit-Branch: libreoffice-3-6 Gerrit-Owner: Caolán McNamara <caol...@redhat.com> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice