From eb7ac082aead752fcffe836664e5141db3dabc1c Mon Sep 17 00:00:00 2001 From: Kyzentun Date: Mon, 11 Aug 2014 15:56:41 -0600 Subject: [PATCH] Report error on fetching empty string metric instead of crashing. --- .../BGAnimations/ScreenSystemLayer error.lua | 2 - src/ThemeManager.cpp | 42 ++++++++++++++++++- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/Themes/_fallback/BGAnimations/ScreenSystemLayer error.lua b/Themes/_fallback/BGAnimations/ScreenSystemLayer error.lua index 4193ed54eb..6772731280 100644 --- a/Themes/_fallback/BGAnimations/ScreenSystemLayer error.lua +++ b/Themes/_fallback/BGAnimations/ScreenSystemLayer error.lua @@ -53,6 +53,4 @@ local log_args= { Font= "Common Error", } -Trace("Loaded error layer.") - return Def.LogDisplay(log_args) diff --git a/src/ThemeManager.cpp b/src/ThemeManager.cpp index c80866f4da..8a9d0625de 100644 --- a/src/ThemeManager.cpp +++ b/src/ThemeManager.cpp @@ -864,12 +864,20 @@ RString ThemeManager::GetMetricsIniPath( const RString &sThemeName ) bool ThemeManager::HasMetric( const RString &sMetricsGroup, const RString &sValueName ) { RString sThrowAway; + if(sMetricsGroup == "" || sValueName == "") + { + return false; + } return GetMetricRawRecursive( g_pLoadedThemeData->iniMetrics, sMetricsGroup, sValueName, sThrowAway ); } bool ThemeManager::HasString( const RString &sMetricsGroup, const RString &sValueName ) { RString sThrowAway; + if(sMetricsGroup == "" || sValueName == "") + { + return false; + } return GetMetricRawRecursive( g_pLoadedThemeData->iniStrings, sMetricsGroup, sValueName, sThrowAway ); } @@ -1045,6 +1053,11 @@ LuaReference ThemeManager::GetMetricR( const RString &sMetricsGroup, const RStri void ThemeManager::PushMetric( Lua *L, const RString &sMetricsGroup, const RString &sValueName ) { + if(sMetricsGroup == "" || sValueName == "") + { + LuaHelpers::ReportScriptError("PushMetric: Attempted to fetch metric with empty group name or empty value name."); + return; + } RString sValue = GetMetricRaw( g_pLoadedThemeData->iniMetrics, sMetricsGroup, sValueName ); RString sName = ssprintf( "%s::%s", sMetricsGroup.c_str(), sValueName.c_str() ); @@ -1179,6 +1192,11 @@ static RString PseudoLocalize( RString s ) RString ThemeManager::GetString( const RString &sMetricsGroup, const RString &sValueName_ ) { RString sValueName = sValueName_; + if(sMetricsGroup == "" || sValueName == "") + { + LuaHelpers::ReportScriptError("PushMetric: Attempted to fetch metric with empty group name or empty value name."); + return ""; + } // TODO: Handle escaping = with \= DEBUG_ASSERT( sValueName.find('=') == sValueName.npos ); @@ -1267,9 +1285,29 @@ public: static int ReloadMetrics( T* p, lua_State *L ) { p->ReloadMetrics(); return 0; } static int HasMetric( T* p, lua_State *L ) { lua_pushboolean(L, p->HasMetric(SArg(1),SArg(2))); return 1; } - static int GetMetric( T* p, lua_State *L ) { p->PushMetric( L, SArg(1),SArg(2) ); return 1; } + static int GetMetric( T* p, lua_State *L ) + { + RString group= SArg(1); + RString name= SArg(2); + if(group == "" || name == "") + { + luaL_error(L, "Cannot fetch metric with empty group name or empty value name."); + } + p->PushMetric(L, group, name); + return 1; + } static int HasString( T* p, lua_State *L ) { lua_pushboolean(L, p->HasString(SArg(1),SArg(2))); return 1; } - static int GetString( T* p, lua_State *L ) { lua_pushstring(L, p->GetString(SArg(1),SArg(2)) ); return 1; } + static int GetString( T* p, lua_State *L ) + { + RString group= SArg(1); + RString name= SArg(2); + if(group == "" || name == "") + { + luaL_error(L, "Cannot fetch string with empty group name or empty value name."); + } + lua_pushstring(L, p->GetString(group, name)); + return 1; + } static int GetPathInfoB( T* p, lua_State *L ) { ThemeManager::PathInfo pi;