* fixed memory allocation crash when using ?{fread,file ALL} in scripts
* found a bug with causes block mismatches in def scripts with multiple nested if/loop/endif/endloop blocks. not yet fixed, but added small check.
This commit is contained in:
parent
1d12dbed90
commit
94c4994a12
@ -375,6 +375,11 @@ bool DefScriptPackage::LoadScriptFromFile(std::string fn){
|
|||||||
}
|
}
|
||||||
else if(line=="loop")
|
else if(line=="loop")
|
||||||
Blocks.push_back(BLOCK_LOOP);
|
Blocks.push_back(BLOCK_LOOP);
|
||||||
|
else if(line=="exitloop" && !Blocks.size()) // TODO: check: at least one BLOCK_LOOP must be opened
|
||||||
|
{
|
||||||
|
cantload=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
else if(line=="endloop")
|
else if(line=="endloop")
|
||||||
{
|
{
|
||||||
if(Blocks.empty() || Blocks.back()!=BLOCK_LOOP)
|
if(Blocks.empty() || Blocks.back()!=BLOCK_LOOP)
|
||||||
|
|||||||
@ -113,13 +113,22 @@ DefReturnResult DefScriptPackage::func_fwrite(CmdSet& Set)
|
|||||||
|
|
||||||
DefReturnResult DefScriptPackage::func_fread(CmdSet& Set)
|
DefReturnResult DefScriptPackage::func_fread(CmdSet& Set)
|
||||||
{
|
{
|
||||||
std::fstream *fh = files.GetNoCreate(_NormalizeVarName(Set.arg[0],Set.myname));
|
std::string fn = _NormalizeVarName(Set.arg[0],Set.myname);
|
||||||
|
std::fstream *fh = files.GetNoCreate(fn);
|
||||||
if(fh && fh->is_open())
|
if(fh && fh->is_open())
|
||||||
{
|
{
|
||||||
uint64 bytes;
|
uint64 bytes;
|
||||||
uint64 read = 0;
|
uint64 read = 0;
|
||||||
if(stringToLower(Set.defaultarg) == "all")
|
if(stringToLower(Set.defaultarg) == "all")
|
||||||
bytes = -1LL;
|
{
|
||||||
|
std::fstream::pos_type begin_pos, end_pos, old_pos = fh->tellg();
|
||||||
|
fh->seekg(0, std::ios_base::beg);
|
||||||
|
begin_pos=fh->tellg();
|
||||||
|
fh->seekg(0, std::ios_base::end);
|
||||||
|
end_pos = fh->tellg();
|
||||||
|
fh->seekg(old_pos, std::ios_base::beg);
|
||||||
|
bytes = (end_pos - begin_pos);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
bytes = toUint64(Set.defaultarg);
|
bytes = toUint64(Set.defaultarg);
|
||||||
std::string ret;
|
std::string ret;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user