* archive64.c (bfd_elf64_archive_write_armap): Fix buffer overrun

when scaning map.
This commit is contained in:
Nathan Sidwell 2010-06-23 10:21:16 +00:00
parent 38f6b338fd
commit 61e8a5ea17
2 changed files with 11 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2010-06-23 Nathan Sidwell <nathan@codesourcery.com>
* archive64.c (bfd_elf64_archive_write_armap): Fix buffer overrun
when scaning map.
2010-06-17 Tristan Gingold <gingold@adacore.com>
* Makefile.am (BFD32_BACKENDS_CFILES): Move vms-alpha.c to ...

View File

@ -194,27 +194,27 @@ bfd_elf64_archive_write_armap (bfd *arch,
/* Write out the file offset for the file associated with each
symbol, and remember to keep the offsets padded out. */
current = arch->archive_head;
count = 0;
while (current != NULL && count < symbol_count)
for (current = arch->archive_head;
current != NULL && count < symbol_count;
current = current->archive_next)
{
/* For each symbol which is used defined in this object, write out
the object file's address in the archive */
while (map[count].u.abfd == current)
for (;
count < symbol_count && map[count].u.abfd == current;
count++)
{
bfd_putb64 ((bfd_vma) archive_member_file_ptr, buf);
if (bfd_bwrite (buf, 8, arch) != 8)
return FALSE;
count++;
}
/* Add size of this archive entry */
archive_member_file_ptr += (arelt_size (current)
+ sizeof (struct ar_hdr));
/* remember about the even alignment */
archive_member_file_ptr += archive_member_file_ptr % 2;
current = current->archive_next;
}
/* now write the strings themselves */