mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
BGSとの通信結果はNULL終端してからXMLパースする必要がある
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@603 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
ba07ffae01
commit
86a7f1526b
@ -82,18 +82,20 @@ nn::Result PreinstallImporter::GetHtmlBodyAndParseXmlData(BgsCommunicator& comm,
|
|||||||
{
|
{
|
||||||
return comm.GetLastResult();
|
return comm.GetLastResult();
|
||||||
}
|
}
|
||||||
if(common::GetAllocatableSize() < bodySize)
|
if(common::GetAllocatableSize() < bodySize + 1)
|
||||||
{
|
{
|
||||||
// 巨大な通信結果のためFATAL。1回で受信しきれるはず
|
// 巨大な通信結果のためFATAL。1回で受信しきれるはず
|
||||||
return nn::Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON,
|
return nn::Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON,
|
||||||
nn::Result::DESCRIPTION_OUT_OF_MEMORY);
|
nn::Result::DESCRIPTION_OUT_OF_MEMORY);
|
||||||
}
|
}
|
||||||
common::HeapManager heap(bodySize);
|
common::HeapManager heap(bodySize + 1);
|
||||||
void* buf = heap.GetAddr();
|
void* buf = heap.GetAddr();
|
||||||
if(!comm.GetBody(reinterpret_cast<u8*>(buf), bodySize))
|
if(!comm.GetBody(reinterpret_cast<u8*>(buf), bodySize + 1))
|
||||||
{
|
{
|
||||||
return comm.GetLastResult();
|
return comm.GetLastResult();
|
||||||
}
|
}
|
||||||
|
// NULL終端する
|
||||||
|
reinterpret_cast<u8*>(buf)[bodySize] = '\0';
|
||||||
|
|
||||||
if(!comm.Finalize())
|
if(!comm.Finalize())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -126,11 +126,18 @@ void BgsCommunicatorTest::Exec()
|
|||||||
comm.Execute(xml.GetData().c_str(), xml.GetData().size());
|
comm.Execute(xml.GetData().c_str(), xml.GetData().size());
|
||||||
size_t bufSize;
|
size_t bufSize;
|
||||||
comm.GetBodySize(&bufSize);
|
comm.GetBodySize(&bufSize);
|
||||||
common::HeapManager heap(bufSize);
|
common::HeapManager heap(bufSize + 1);
|
||||||
void* buf = heap.GetAddr();
|
void* buf = heap.GetAddr();
|
||||||
comm.GetBody(reinterpret_cast<u8*>(buf), bufSize);
|
comm.GetBody(reinterpret_cast<u8*>(buf), bufSize + 1);
|
||||||
comm.Finalize();
|
comm.Finalize();
|
||||||
|
|
||||||
|
// NULL終端する
|
||||||
|
reinterpret_cast<u8*>(buf)[bufSize] = '\0';
|
||||||
|
|
||||||
|
// 変換前
|
||||||
|
std::string before(reinterpret_cast<char*>(buf));
|
||||||
|
PutString(before);
|
||||||
|
|
||||||
// simpleXMLに変換します
|
// simpleXMLに変換します
|
||||||
ConsoleRestore::SimpleXmlPreprocessor pp;
|
ConsoleRestore::SimpleXmlPreprocessor pp;
|
||||||
std::string xmlData(reinterpret_cast<char*>(buf));
|
std::string xmlData(reinterpret_cast<char*>(buf));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user