Commit aaa1d3cf authored by Chen Bill's avatar Chen Bill Committed by GitHub

fix ScriptReader (#2642)

* fix ScriptReader

* increase scriptBuffer

* fix DeckManager::LoadCurrentDeck
parent cc18709f
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
namespace ygo { namespace ygo {
const wchar_t* DataManager::unknown_string = L"???"; const wchar_t* DataManager::unknown_string = L"???";
unsigned char DataManager::scriptBuffer[0x20000]; unsigned char DataManager::scriptBuffer[0x100000];
IFileSystem* DataManager::FileSystem; IFileSystem* DataManager::FileSystem;
DataManager dataManager; DataManager dataManager;
...@@ -424,14 +424,11 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) { ...@@ -424,14 +424,11 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) {
#endif #endif
if (!reader) if (!reader)
return nullptr; return nullptr;
size_t size = reader->getSize(); int size = reader->read(scriptBuffer, sizeof scriptBuffer);
if (size > sizeof scriptBuffer) {
reader->drop();
return nullptr;
}
reader->read(scriptBuffer, size);
reader->drop(); reader->drop();
*slen = (int)size; if (size >= (int)sizeof scriptBuffer)
return nullptr;
*slen = size;
return scriptBuffer; return scriptBuffer;
} }
unsigned char* DataManager::DefaultScriptReader(const char* script_name, int* slen) { unsigned char* DataManager::DefaultScriptReader(const char* script_name, int* slen) {
......
...@@ -50,7 +50,7 @@ public: ...@@ -50,7 +50,7 @@ public:
std::unordered_map<unsigned int, std::wstring> _sysStrings; std::unordered_map<unsigned int, std::wstring> _sysStrings;
char errmsg[512]{}; char errmsg[512]{};
static unsigned char scriptBuffer[0x20000]; static unsigned char scriptBuffer[0x100000];
static const wchar_t* unknown_string; static const wchar_t* unknown_string;
static uint32_t CardReader(uint32_t, card_data*); static uint32_t CardReader(uint32_t, card_data*);
static unsigned char* ScriptReaderEx(const char* script_name, int* slen); static unsigned char* ScriptReaderEx(const char* script_name, int* slen);
......
...@@ -280,25 +280,23 @@ bool DeckManager::LoadCurrentDeck(const wchar_t* file, bool is_packlist) { ...@@ -280,25 +280,23 @@ bool DeckManager::LoadCurrentDeck(const wchar_t* file, bool is_packlist) {
current_deck.clear(); current_deck.clear();
IReadFile* reader = OpenDeckReader(file); IReadFile* reader = OpenDeckReader(file);
if(!reader) { if(!reader) {
wchar_t localfile[64]; wchar_t localfile[256];
myswprintf(localfile, L"./deck/%ls.ydk", file); myswprintf(localfile, L"./deck/%ls.ydk", file);
reader = OpenDeckReader(localfile); reader = OpenDeckReader(localfile);
} }
if(!reader && !mywcsncasecmp(file, L"./pack", 6)) { if(!reader && !mywcsncasecmp(file, L"./pack", 6)) {
wchar_t zipfile[64]; wchar_t zipfile[256];
myswprintf(zipfile, L"%ls", file + 2); myswprintf(zipfile, L"%ls", file + 2);
reader = OpenDeckReader(zipfile); reader = OpenDeckReader(zipfile);
} }
if(!reader) if(!reader)
return false; return false;
auto size = reader->getSize();
if(size >= (int)sizeof deckBuffer) {
reader->drop();
return false;
}
std::memset(deckBuffer, 0, sizeof deckBuffer); std::memset(deckBuffer, 0, sizeof deckBuffer);
reader->read(deckBuffer, size); int size = reader->read(deckBuffer, sizeof deckBuffer);
reader->drop(); reader->drop();
if (size >= (int)sizeof deckBuffer) {
return false;
}
std::istringstream deckStream(deckBuffer); std::istringstream deckStream(deckBuffer);
LoadDeck(current_deck, deckStream, is_packlist); LoadDeck(current_deck, deckStream, is_packlist);
return true; // the above LoadDeck has return value but we ignore it here for now return true; // the above LoadDeck has return value but we ignore it here for now
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment