mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
ReadAsCharの戻り値を必ずNULL終端するように
設定項目数が上限を超えたらエラーにする 不正なDNSアドレスを変換しないように git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@54 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
2e588f3d8c
commit
73512b750f
@ -1036,55 +1036,62 @@ bool ReadSetting()
|
|||||||
|
|
||||||
{
|
{
|
||||||
const char* dnsPrimary = configfileLoader.ReadAsChar(L"DNS_PRI"); // プライマリDNS
|
const char* dnsPrimary = configfileLoader.ReadAsChar(L"DNS_PRI"); // プライマリDNS
|
||||||
if(!networkSetting.ip.autoDNSSetting && dnsPrimary == NULL)
|
if(!networkSetting.ip.autoDNSSetting)
|
||||||
{
|
{
|
||||||
COMMON_LOGGER("DNS_PRI: is missing\n");
|
if (dnsPrimary == NULL)
|
||||||
retval = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
u8 dns[4];
|
|
||||||
nn::socket::InAddr addr;
|
|
||||||
if (1 == nn::socket::InetAtoN(dnsPrimary, &addr))
|
|
||||||
{
|
{
|
||||||
dns[3] = (0xff & (addr.addr >> 24));
|
COMMON_LOGGER("DNS_PRI: is missing\n");
|
||||||
dns[2] = (0xff & (addr.addr >> 16));
|
retval = false;
|
||||||
dns[1] = (0xff & (addr.addr >> 8));
|
|
||||||
dns[0] = (0xff & (addr.addr));
|
|
||||||
}
|
|
||||||
std::memcpy(networkSetting.ip.dns[0], dns, 4);
|
|
||||||
COMMON_LOGGER("DNS_PRI = %03d.%03d.%03d.%03d\n", networkSetting.ip.dns[0][0],
|
|
||||||
networkSetting.ip.dns[0][1],
|
|
||||||
networkSetting.ip.dns[0][2],
|
|
||||||
networkSetting.ip.dns[0][3]);
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
u8 dns[4];
|
||||||
|
nn::socket::InAddr addr;
|
||||||
|
if (1 == nn::socket::InetAtoN(dnsPrimary, &addr))
|
||||||
|
{
|
||||||
|
dns[3] = (0xff & (addr.addr >> 24));
|
||||||
|
dns[2] = (0xff & (addr.addr >> 16));
|
||||||
|
dns[1] = (0xff & (addr.addr >> 8));
|
||||||
|
dns[0] = (0xff & (addr.addr));
|
||||||
|
}
|
||||||
|
std::memcpy(networkSetting.ip.dns[0], dns, 4);
|
||||||
|
COMMON_LOGGER("DNS_PRI = %03d.%03d.%03d.%03d\n", networkSetting.ip.dns[0][0],
|
||||||
|
networkSetting.ip.dns[0][1],
|
||||||
|
networkSetting.ip.dns[0][2],
|
||||||
|
networkSetting.ip.dns[0][3]);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const char* dnsSecondary = configfileLoader.ReadAsChar(L"DNS_SEC"); // セカンダリDNS
|
const char* dnsSecondary = configfileLoader.ReadAsChar(L"DNS_SEC"); // セカンダリDNS
|
||||||
if(!networkSetting.ip.autoDNSSetting && dnsSecondary == NULL)
|
if(!networkSetting.ip.autoDNSSetting)
|
||||||
{
|
{
|
||||||
COMMON_LOGGER("DNS_SEC: is missing\n");
|
if(dnsSecondary == NULL)
|
||||||
retval = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
u8 dns[4];
|
|
||||||
nn::socket::InAddr addr;
|
|
||||||
if (1 == nn::socket::InetAtoN(dnsSecondary, &addr))
|
|
||||||
{
|
{
|
||||||
dns[3] = (0xff & (addr.addr >> 24));
|
COMMON_LOGGER("DNS_SEC: is missing\n");
|
||||||
dns[2] = (0xff & (addr.addr >> 16));
|
retval = false;
|
||||||
dns[1] = (0xff & (addr.addr >> 8));
|
|
||||||
dns[0] = (0xff & (addr.addr));
|
|
||||||
}
|
}
|
||||||
std::memcpy(networkSetting.ip.dns[1], dns, 4);
|
else
|
||||||
COMMON_LOGGER("DNS_SEC = %03d.%03d.%03d.%03d\n", networkSetting.ip.dns[1][0],
|
{
|
||||||
networkSetting.ip.dns[1][1],
|
u8 dns[4];
|
||||||
networkSetting.ip.dns[1][2],
|
nn::socket::InAddr addr;
|
||||||
networkSetting.ip.dns[1][3]);
|
if (1 == nn::socket::InetAtoN(dnsSecondary, &addr))
|
||||||
|
{
|
||||||
|
dns[3] = (0xff & (addr.addr >> 24));
|
||||||
|
dns[2] = (0xff & (addr.addr >> 16));
|
||||||
|
dns[1] = (0xff & (addr.addr >> 8));
|
||||||
|
dns[0] = (0xff & (addr.addr));
|
||||||
|
}
|
||||||
|
std::memcpy(networkSetting.ip.dns[1], dns, 4);
|
||||||
|
COMMON_LOGGER("DNS_SEC = %03d.%03d.%03d.%03d\n", networkSetting.ip.dns[1][0],
|
||||||
|
networkSetting.ip.dns[1][1],
|
||||||
|
networkSetting.ip.dns[1][2],
|
||||||
|
networkSetting.ip.dns[1][3]);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -65,56 +65,64 @@ Result ConfigFileLoader::ParseData()
|
|||||||
{
|
{
|
||||||
switch (m_Buffer[pos])
|
switch (m_Buffer[pos])
|
||||||
{
|
{
|
||||||
case L'"':
|
case L'"':
|
||||||
{
|
|
||||||
inEscape = !inEscape;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case L'#':
|
|
||||||
{
|
|
||||||
inComment = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case L':':
|
|
||||||
{
|
|
||||||
if(inEscape || inComment)
|
|
||||||
{
|
{
|
||||||
break;
|
inEscape = !inEscape;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case L'#':
|
||||||
|
{
|
||||||
|
inComment = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case L':':
|
||||||
|
{
|
||||||
|
if (inEscape || inComment)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inSettingKeyValue)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
inSettingKeyValue = true;
|
||||||
|
}
|
||||||
|
m_Buffer[pos] = L'\0';
|
||||||
|
m_ParamValue[m_ParamNum++] = &(m_Buffer[pos + 1]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(inSettingKeyValue)
|
break;
|
||||||
|
case L'\r':
|
||||||
|
case L'\n':
|
||||||
{
|
{
|
||||||
break;
|
if (inComment)
|
||||||
|
{
|
||||||
|
inComment = false;
|
||||||
|
}
|
||||||
|
if (inSettingKeyValue)
|
||||||
|
{
|
||||||
|
inSettingKeyValue = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Buffer[pos] = L'\0';
|
||||||
|
m_ParamName[m_ParamNum] = &(m_Buffer[pos + 1]);
|
||||||
|
m_ParamValue[m_ParamNum] = L'\0';
|
||||||
}
|
}
|
||||||
else
|
break;
|
||||||
{
|
|
||||||
inSettingKeyValue = true;
|
|
||||||
}
|
|
||||||
m_Buffer[pos] = L'\0';
|
|
||||||
m_ParamValue[m_ParamNum++] = &(m_Buffer[pos + 1]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
if (PARAM_MAX_NUM <= m_ParamNum)
|
||||||
case L'\r':
|
|
||||||
case L'\n':
|
|
||||||
{
|
{
|
||||||
if(inComment)
|
NN_TLOG_("Too Many Params\n");
|
||||||
{
|
return Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON,
|
||||||
inComment = false;
|
nn::Result::DESCRIPTION_TOO_LARGE);
|
||||||
}
|
|
||||||
if(inSettingKeyValue)
|
|
||||||
{
|
|
||||||
inSettingKeyValue = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_Buffer[pos] = L'\0';
|
|
||||||
m_ParamName[m_ParamNum] = &(m_Buffer[pos + 1]);
|
|
||||||
m_ParamValue[m_ParamNum] = L'\0';
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
@ -158,7 +166,9 @@ const char *ConfigFileLoader::ReadAsChar(const wchar_t *paramName)
|
|||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
wcstombs(m_ReadCharBuffer, value, wcslen(value));
|
wcstombs(m_ReadCharBuffer, value, sizeof(m_ReadCharBuffer));
|
||||||
|
// NULL終端する
|
||||||
|
m_ReadCharBuffer[sizeof(m_ReadCharBuffer) - 1] = '\0';
|
||||||
return m_ReadCharBuffer;
|
return m_ReadCharBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,6 @@ namespace common
|
|||||||
class ConfigFileLoader
|
class ConfigFileLoader
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
static const int PARAM_NAME_MAX_STRING_LENGTH = 16;
|
|
||||||
static const int PARAM_VALUE_MAX_STRING_LENGTH = 128;
|
static const int PARAM_VALUE_MAX_STRING_LENGTH = 128;
|
||||||
static const int PARAM_MAX_NUM = 64;
|
static const int PARAM_MAX_NUM = 64;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user