Added NULL checks for the CConfigParser::ReadString()'s parameters (http://code.google.com/p/rainmeter/issues/detail?id=105).

The font and registry handle are now free'ed properly if Initialize() is called multiple times.
This commit is contained in:
Kimmo Pekkola 2009-09-02 17:04:47 +00:00
parent 81f674117d
commit 9fcd6896de
3 changed files with 17 additions and 0 deletions

View File

@ -136,6 +136,19 @@ const std::wstring& CConfigParser::ReadString(LPCTSTR section, LPCTSTR key, LPCT
{ {
static std::wstring result; static std::wstring result;
if (section == NULL)
{
section = L"";
}
if (key == NULL)
{
key = L"";
}
if (defValue == NULL)
{
defValue = L"";
}
result = GetValue(section, key, defValue); result = GetValue(section, key, defValue);
if (result == defValue) if (result == defValue)
{ {

View File

@ -154,6 +154,7 @@ void CMeasureRegistry::ReadConfig(CConfigParser& parser, const WCHAR* section)
} }
// Try to open the key // Try to open the key
if(m_RegKey) RegCloseKey(m_RegKey);
RegOpenKeyEx(m_HKey, m_RegKeyName.c_str(), 0, KEY_READ, &m_RegKey); RegOpenKeyEx(m_HKey, m_RegKeyName.c_str(), 0, KEY_READ, &m_RegKey);
} }

View File

@ -106,6 +106,7 @@ void CMeterString::Initialize()
{ {
CMeter::Initialize(); CMeter::Initialize();
if(m_FontFamily) delete m_FontFamily;
m_FontFamily = new FontFamily(m_FontFace.c_str()); m_FontFamily = new FontFamily(m_FontFace.c_str());
Status status = m_FontFamily->GetLastStatus(); Status status = m_FontFamily->GetLastStatus();
if(Ok != status) if(Ok != status)
@ -140,10 +141,12 @@ void CMeterString::Initialize()
if (m_FontFamily) if (m_FontFamily)
{ {
if(m_Font) delete m_Font;
m_Font = new Gdiplus::Font(m_FontFamily, size, style); m_Font = new Gdiplus::Font(m_FontFamily, size, style);
} }
else else
{ {
if(m_Font) delete m_Font;
m_Font = new Gdiplus::Font(FontFamily::GenericSansSerif(), size, style); m_Font = new Gdiplus::Font(FontFamily::GenericSansSerif(), size, style);
} }