1
0
mirror of https://github.com/upx/upx synced 2025-10-05 19:20:23 +08:00

Detect bad e_shstrtab better.

https://github.com/upx/upx/issues/332
	modified:   p_lx_elf.cpp
This commit is contained in:
John Reiser 2020-01-13 17:26:31 -08:00
parent eb90eab632
commit 1bb93d4fce

View File

@ -2039,11 +2039,12 @@ bool PackLinuxElf32::canPack()
if (sec_strndx) {
unsigned const sh_name = get_te32(&sec_strndx->sh_name);
if (Elf32_Shdr::SHT_STRTAB != get_te32(&sec_strndx->sh_type)
|| (u32_t)file_size <= sh_name // FIXME: weak
|| (u32_t)file_size <= (sizeof(".shstrtab")
+ sh_name + (shstrtab - (const char *)&file_image[0]))
|| (sh_name
&& 0!=strcmp((char const *)".shstrtab", &shstrtab[sh_name]))
) {
throwCantPack("bad e_shstrndx");
throwCantPack("bad e_shstrtab");
}
}
}
@ -2388,11 +2389,12 @@ PackLinuxElf64::canPack()
if (sec_strndx) {
unsigned const sh_name = get_te32(&sec_strndx->sh_name);
if (Elf64_Shdr::SHT_STRTAB != get_te32(&sec_strndx->sh_type)
|| (u32_t)file_size <= sh_name // FIXME: weak
|| (u32_t)file_size <= (sizeof(".shstrtab")
+ sh_name + (shstrtab - (const char *)&file_image[0]))
|| (sh_name
&& 0!=strcmp((char const *)".shstrtab", &shstrtab[sh_name]))
) {
throwCantPack("bad e_shstrndx");
throwCantPack("bad e_shstrtab");
}
}
}