mirror of
https://github.com/upx/upx
synced 2025-10-05 19:20:23 +08:00
fixed too strict checks in resource handling
This commit is contained in:
parent
f0b13ae8e4
commit
1c735cc204
|
@ -1638,7 +1638,7 @@ void PeFile::Resource::build(const upx_rnode *node, unsigned &bpos,
|
||||||
{
|
{
|
||||||
if (level == 3)
|
if (level == 3)
|
||||||
{
|
{
|
||||||
if (bpos + sizeof(res_data) >= dirsize())
|
if (bpos + sizeof(res_data) > dirsize())
|
||||||
throwCantUnpack("corrupted resources");
|
throwCantUnpack("corrupted resources");
|
||||||
|
|
||||||
res_data *l = (res_data*) (newstart + bpos);
|
res_data *l = (res_data*) (newstart + bpos);
|
||||||
|
@ -1649,7 +1649,7 @@ void PeFile::Resource::build(const upx_rnode *node, unsigned &bpos,
|
||||||
bpos += sizeof(*l);
|
bpos += sizeof(*l);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (bpos + sizeof(res_dir) >= dirsize())
|
if (bpos + sizeof(res_dir) > dirsize())
|
||||||
throwCantUnpack("corrupted resources");
|
throwCantUnpack("corrupted resources");
|
||||||
|
|
||||||
res_dir * const b = (res_dir*) (newstart + bpos);
|
res_dir * const b = (res_dir*) (newstart + bpos);
|
||||||
|
@ -1667,7 +1667,7 @@ void PeFile::Resource::build(const upx_rnode *node, unsigned &bpos,
|
||||||
if ((p = branch->children[ic]->name) != 0)
|
if ((p = branch->children[ic]->name) != 0)
|
||||||
{
|
{
|
||||||
be->tnl = spos + 0x80000000;
|
be->tnl = spos + 0x80000000;
|
||||||
if (spos + get_le16(p) * 2 + 2 >= dirsize())
|
if (spos + get_le16(p) * 2 + 2 > dirsize())
|
||||||
throwCantUnpack("corrupted resources");
|
throwCantUnpack("corrupted resources");
|
||||||
memcpy(newstart + spos,p,get_le16(p) * 2 + 2);
|
memcpy(newstart + spos,p,get_le16(p) * 2 + 2);
|
||||||
spos += get_le16(p) * 2 + 2;
|
spos += get_le16(p) * 2 + 2;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user