https://issues.shibboleth.net/jira/browse/CPPXT-96
[shibboleth/cpp-xmltooling.git] / xmltooling / util / ParserPool.cpp
index 1176617..f6bc369 100644 (file)
@@ -104,7 +104,17 @@ namespace {
 
 
 ParserPool::ParserPool(bool namespaceAware, bool schemaAware)
-    : m_namespaceAware(namespaceAware), m_schemaAware(schemaAware), m_lock(Mutex::create()), m_security(new SecurityManager()) {}
+        : m_namespaceAware(namespaceAware), m_schemaAware(schemaAware), m_lock(Mutex::create()), m_security(new SecurityManager()) {
+
+    int expLimit = 0;
+    const char* env = getenv("XMLTOOLING_ENTITY_EXPANSION_LIMIT");
+    if (env) {
+        expLimit = atoi(env);
+    }
+    if (expLimit <= 0)
+        expLimit = XMLTOOLING_ENTITY_EXPANSION_LIMIT;
+    m_security->setEntityExpansionLimit(expLimit);
+}
 
 ParserPool::~ParserPool()
 {
@@ -247,10 +257,8 @@ bool ParserPool::loadCatalogs(const char* pathnames)
     string temp(pathnames);
     vector<string> catpaths;
     split(catpaths, temp, is_any_of(PATH_SEPARATOR_STR), algorithm::token_compress_on);
-    for (vector<string>::iterator i = catpaths.begin(); i != catpaths.end(); ++i) {
-        XMLToolingConfig::getConfig().getPathResolver()->resolve(*i, PathResolver::XMLTOOLING_XML_FILE);
-        loadCatalog(i->c_str());
-    }
+    static bool (ParserPool::* lc)(const char*) = &ParserPool::loadCatalog;
+    for_each(catpaths.begin(), catpaths.end(), boost::bind(lc, this, boost::bind(&string::c_str, _1)));
     return !catpaths.empty();
 }