Fix T98201: Corrution of filepaths in some case during 'make relative' process.

We need to ensure `Main.filepath` is consistent with the current path
where we are saving the .blend file, otherwise some path processing code
can produce invalid results (happens with e.g. the code syncing the two
path storages in Library IDs).
This commit is contained in:
Bastien Montagne 2022-05-17 17:32:23 +02:00
parent 8fdd3aad9b
commit 83349294b1
Notes: blender-bot 2023-02-14 10:32:59 +01:00
Referenced by issue #98201, Corrution of filepaths in some case during 'make relative' process
1 changed files with 9 additions and 1 deletions

View File

@ -1349,7 +1349,6 @@ bool BLO_write_file(Main *mainvar,
/* Remapping of relative paths to new file location. */
if (remap_mode != BLO_WRITE_PATH_REMAP_NONE) {
if (remap_mode == BLO_WRITE_PATH_REMAP_RELATIVE) {
/* Make all relative as none of the existing paths can be relative in an unsaved document. */
if (relbase_valid == false) {
@ -1388,6 +1387,13 @@ bool BLO_write_file(Main *mainvar,
}
if (remap_mode != BLO_WRITE_PATH_REMAP_NONE) {
/* Some path processing (e.g. with libraries) may use the current `main->filepath`, if this
* is not matching the path currently used for saving, unexpected paths corruptions can
* happen. See T98201. */
char mainvar_filepath_orig[FILE_MAX];
STRNCPY(mainvar_filepath_orig, mainvar->filepath);
STRNCPY(mainvar->filepath, filepath);
/* Check if we need to backup and restore paths. */
if (UNLIKELY(use_save_as_copy)) {
path_list_backup = BKE_bpath_list_backup(mainvar, path_list_flag);
@ -1412,6 +1418,8 @@ bool BLO_write_file(Main *mainvar,
BLI_assert(0); /* Unreachable. */
break;
}
STRNCPY(mainvar->filepath, mainvar_filepath_orig);
}
}