diff options
author | Aras Pranckevicius <aras@nesnausk.org> | 2022-05-04 15:10:54 +0300 |
---|---|---|
committer | Aras Pranckevicius <aras@nesnausk.org> | 2022-05-04 15:10:54 +0300 |
commit | cbeb8770cc4daec5c81f8d8ce060a1b594c039bb (patch) | |
tree | e25bc52bb3636f8573e819712768a51dfdf24df2 /source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc | |
parent | b31f5b8ce7ae0f3f8195dc04a2006945fe6b4bff (diff) |
Fix T97794: new OBJ importer does not handle quoted MTL paths
Fixes T97794 (which is a reintroduction of an older issue T67266 that
has been fixed in the python importer, but the fix was not in the C++
one). Some software produces OBJ files with mtllib statements like
mtllib "file name in quotes.mtl", and the new importer was not stripping
the quotes away.
While at it, I noticed that MTLParser constructor was taking a StringRef
and treating it as a zero-terminated string, which is not necessarily
the case. Fixed that by explicitly using a StringRefNull type.
Reviewed By: Howard Trickey
Differential Revision: https://developer.blender.org/D14838
Diffstat (limited to 'source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc')
-rw-r--r-- | source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc index 8df2a6bf16a..f57828725a0 100644 --- a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc +++ b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc @@ -618,8 +618,13 @@ Span<std::string> OBJParser::mtl_libraries() const return mtl_libraries_; } -void OBJParser::add_mtl_library(const std::string &path) +void OBJParser::add_mtl_library(StringRef path) { + /* Remove any quotes from start and end (T67266, T97794). */ + if (path.size() > 2 && path.startswith("\"") && path.endswith("\"")) { + path = path.drop_prefix(1).drop_suffix(1); + } + if (!mtl_libraries_.contains(path)) { mtl_libraries_.append(path); } @@ -642,7 +647,7 @@ void OBJParser::add_default_mtl_library() } } -MTLParser::MTLParser(StringRef mtl_library, StringRefNull obj_filepath) +MTLParser::MTLParser(StringRefNull mtl_library, StringRefNull obj_filepath) { char obj_file_dir[FILE_MAXDIR]; BLI_split_dir_part(obj_filepath.data(), obj_file_dir, FILE_MAXDIR); |