From d66673fa6fb30af3d21e9da61ede7db7bdb64d8f Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 20 Mar 2004 10:24:42 +0000 Subject: [PATCH] infinite recursion checking --- stepmania/src/ThemeManager.cpp | 11 ++++++----- stepmania/src/ThemeManager.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/stepmania/src/ThemeManager.cpp b/stepmania/src/ThemeManager.cpp index 8b77683c6f..0676eb72df 100644 --- a/stepmania/src/ThemeManager.cpp +++ b/stepmania/src/ThemeManager.cpp @@ -493,17 +493,18 @@ void ThemeManager::ReloadMetrics() } -bool ThemeManager::GetMetricRaw( CString sClassName, CString sValueName, CString &ret ) +bool ThemeManager::GetMetricRaw( CString sClassName, CString sValueName, CString &ret, int level ) { - CString sFallback; + if( level > 100 ) + RageException::Throw("Infinite recursion looking up theme metric \"%s::%s\"", sClassName.c_str(), sValueName.c_str() ); - // TODO: Add infinite recursion checking + CString sFallback; if( m_pIniCurMetrics->GetValue(sClassName,sValueName,ret) ) return true; if( m_pIniCurMetrics->GetValue(sClassName,"Fallback",sFallback) ) { - if( GetMetricRaw(sFallback,sValueName,ret) ) + if( GetMetricRaw(sFallback,sValueName,ret,level+1) ) return true; } @@ -511,7 +512,7 @@ bool ThemeManager::GetMetricRaw( CString sClassName, CString sValueName, CString return true; if( m_pIniBaseMetrics->GetValue(sClassName,"Fallback",sFallback) ) { - if( GetMetricRaw(sFallback,sValueName,ret) ) + if( GetMetricRaw(sFallback,sValueName,ret,level+1) ) return true; } diff --git a/stepmania/src/ThemeManager.h b/stepmania/src/ThemeManager.h index f2c6f96884..31ee63fcbe 100644 --- a/stepmania/src/ThemeManager.h +++ b/stepmania/src/ThemeManager.h @@ -66,7 +66,7 @@ public: RageColor GetMetricC( CString sClassName, CString sValueName ); protected: - bool GetMetricRaw( CString sClassName, CString sValueName, CString &ret ); + bool GetMetricRaw( CString sClassName, CString sValueName, CString &ret, int level=0 ); CString GetPathToAndFallback( CString sThemeName, ElementCategory category, CString sClassName, CString sFile ); CString GetPathToRaw( CString sThemeName, ElementCategory category, CString sClassName, CString sFile ); static CString GetThemeDirFromName( const CString &sThemeName );