summaryrefslogtreecommitdiff
path: root/indra/llprimitive/lldaeloader.cpp
diff options
context:
space:
mode:
authorcallum_linden <callum@lindenlab.com>2017-12-11 10:09:44 -0800
committercallum_linden <callum@lindenlab.com>2017-12-11 10:09:44 -0800
commit5561673bf1c98c717f69e747a9e8b0d56129ef12 (patch)
treef021c5beca7aaad132c60d25881c7920a9944daf /indra/llprimitive/lldaeloader.cpp
parentfe29551d9a6685bdc40e87ae135f236aec1ea475 (diff)
parentc565c62745ec37484118888f8f45dbde34d42e46 (diff)
Automated merge with tip of viewer64 *plus* update to CEF 3.3202.1686 / Dullahan 901
Diffstat (limited to 'indra/llprimitive/lldaeloader.cpp')
-rw-r--r--indra/llprimitive/lldaeloader.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp
index 768dc8284b..8401cb976e 100644
--- a/indra/llprimitive/lldaeloader.cpp
+++ b/indra/llprimitive/lldaeloader.cpp
@@ -862,16 +862,26 @@ bool LLDAELoader::OpenFile(const std::string& filename)
setLoadState( READING_FILE );
//no suitable slm exists, load from the .dae file
+
+ // Collada expects file and folder names to be escaped
+ // Note: cdom::nativePathToUri()
+ const char* allowed =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789"
+ "%-._~:\"|\\/";
+ std::string uri_filename = LLURI::escape(filename, allowed);
+
DAE dae;
domCOLLADA* dom;
if (mPreprocessDAE)
{
- dom = dae.openFromMemory(filename, preprocessDAE(filename).c_str());
+ dom = dae.openFromMemory(uri_filename, preprocessDAE(filename).c_str());
}
else
{
LL_INFOS() << "Skipping dae preprocessing" << LL_ENDL;
- dom = dae.open(filename);
+ dom = dae.open(uri_filename);
}
if (!dom)
@@ -900,7 +910,7 @@ bool LLDAELoader::OpenFile(const std::string& filename)
daeInt count = db->getElementCount(NULL, COLLADA_TYPE_MESH);
- daeDocument* doc = dae.getDoc(filename);
+ daeDocument* doc = dae.getDoc(uri_filename);
if (!doc)
{
LL_WARNS() << "can't find internal doc" << LL_ENDL;