projects
/
platform
/
upstream
/
binutils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed gold installation
[platform/upstream/binutils.git]
/
bfd
/
elf-attrs.c
diff --git
a/bfd/elf-attrs.c
b/bfd/elf-attrs.c
index
d2ef769
..
cd0cbca
100644
(file)
--- a/
bfd/elf-attrs.c
+++ b/
bfd/elf-attrs.c
@@
-449,7
+449,7
@@
_bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
len = hdr->sh_size - 1;
while (len > 0)
{
len = hdr->sh_size - 1;
while (len > 0)
{
-
int
namelen;
+
unsigned
namelen;
bfd_vma section_len;
int vendor;
bfd_vma section_len;
int vendor;
@@
-458,8
+458,11
@@
_bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
if (section_len > len)
section_len = len;
len -= section_len;
if (section_len > len)
section_len = len;
len -= section_len;
- namelen = strlen ((char *) p) + 1;
- section_len -= namelen + 4;
+ section_len -= 4;
+ namelen = strnlen ((char *) p, section_len) + 1;
+ if (namelen == 0 || namelen >= section_len)
+ break;
+ section_len -= namelen;
if (std_sec && strcmp ((char *) p, std_sec) == 0)
vendor = OBJ_ATTR_PROC;
else if (strcmp ((char *) p, "gnu") == 0)
if (std_sec && strcmp ((char *) p, std_sec) == 0)
vendor = OBJ_ATTR_PROC;
else if (strcmp ((char *) p, "gnu") == 0)