diff options
| author | andreykproductengine <andreykproductengine@lindenlab.com> | 2018-11-29 19:25:00 +0200 | 
|---|---|---|
| committer | andreykproductengine <andreykproductengine@lindenlab.com> | 2018-11-29 19:25:00 +0200 | 
| commit | 13f8cfd1c27a5ca0d9b66a38cbe11fc96a123a8c (patch) | |
| tree | 9f88c7973e16b18ddb6833da62b7522d09529e92 /indra | |
| parent | e2442851c61ad645020d78be8ae0c7c851024758 (diff) | |
SL-9954 Mac Viewer crashes if logcontrol-dev.xml is modified
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llcommon/llerror.cpp | 48 | 
1 files changed, 30 insertions, 18 deletions
| diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 40eb7d9bac..17d8164289 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -382,15 +382,22 @@ namespace  		{  			llifstream file(filename().c_str()); -			if (file.is_open()) +			if (!file.is_open())  			{ -				LLSDSerialize::fromXML(configuration, file); +				LL_WARNS() << filename() << " failed to open file; not changing configuration" << LL_ENDL; +				return false; +			} + +			if (LLSDSerialize::fromXML(configuration, file) == LLSDParser::PARSE_FAILURE) +			{ +				LL_WARNS() << filename() << " parcing error; not changing configuration" << LL_ENDL; +				return false;  			} -			if (configuration.isUndefined()) +			if (configuration.isUndefined() || !configuration.isMap() || configuration.emptyMap())  			{ -				LL_WARNS() << filename() << " missing, ill-formed," -							" or simply undefined; not changing configuration" +				LL_WARNS() << filename() << " missing, ill-formed, or simply undefined" +							" content; not changing configuration"  						<< LL_ENDL;  				return false;  			} @@ -856,19 +863,24 @@ namespace LLError              setEnabledLogTypesMask(config["enabled-log-types-mask"].asInteger());          } -		LLSD sets = config["settings"]; -		LLSD::array_const_iterator a, end; -		for (a = sets.beginArray(), end = sets.endArray(); a != end; ++a) -		{ -			const LLSD& entry = *a; -			 -			ELevel level = decodeLevel(entry["level"]); -			 -			setLevels(s->mFunctionLevelMap,	entry["functions"],	level); -			setLevels(s->mClassLevelMap,	entry["classes"],	level); -			setLevels(s->mFileLevelMap,		entry["files"],		level); -			setLevels(s->mTagLevelMap,		entry["tags"],		level); -		} +        if (config.has("settings") && config["settings"].isArray()) +        { +            LLSD sets = config["settings"]; +            LLSD::array_const_iterator a, end; +            for (a = sets.beginArray(), end = sets.endArray(); a != end; ++a) +            { +                const LLSD& entry = *a; +                if (entry.isMap() && !entry.emptyMap()) +                { +                    ELevel level = decodeLevel(entry["level"]); + +                    setLevels(s->mFunctionLevelMap, entry["functions"], level); +                    setLevels(s->mClassLevelMap, entry["classes"], level); +                    setLevels(s->mFileLevelMap, entry["files"], level); +                    setLevels(s->mTagLevelMap, entry["tags"], level); +                } +            } +        }  	}  } | 
