Also store the string table size for an image. This helps to improve the

symbol name len check.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27682 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2008-09-21 23:38:46 +00:00
parent 061eba4a0f
commit 7ada326834
2 changed files with 6 additions and 3 deletions

View File

@ -200,7 +200,8 @@ ImageFile::ImageFile(const image_info& info)
fLoadDelta(0),
fSymbolTable(NULL),
fStringTable(NULL),
fSymbolCount(0)
fSymbolCount(0),
fStringTableSize(0)
{
}
@ -300,6 +301,7 @@ ImageFile::Load()
= (const Elf32_Sym*)(fMappedFile + sectionHeader->sh_offset);
fStringTable = (const char*)(fMappedFile + stringHeader.sh_offset);
fSymbolCount = sectionHeader->sh_size / sizeof(Elf32_Sym);
fStringTableSize = stringHeader.sh_size;
return B_OK;
}
@ -392,12 +394,12 @@ size_t
ImageFile::_SymbolNameLen(const char* symbolName) const
{
if (symbolName == NULL || (addr_t)symbolName < (addr_t)fStringTable
|| (addr_t)symbolName >= (addr_t)fMappedFile + fFileSize) {
|| (addr_t)symbolName >= (addr_t)fStringTable + fStringTableSize) {
return 0;
}
return strnlen(symbolName,
(addr_t)fMappedFile + fFileSize - (addr_t)symbolName);
(addr_t)fStringTable + fStringTableSize - (addr_t)symbolName);
}

View File

@ -152,6 +152,7 @@ private:
const Elf32_Sym* fSymbolTable;
const char* fStringTable;
int32 fSymbolCount;
size_t fStringTableSize;
};