Allow zero length archive elements.

bfd	PR binutils/19775
	* archive.c (bfd_generic_openr_next_archived_file): Allow zero
	length elements in the archive.

binutils PR binutils/19775
	* testsuite/binutils-all/ar.exp (proc empty_archive): New proc.
	Run the new proc.
	* testsuite/binutils-all/empty: New, empty, file.
This commit is contained in:
Nick Clifton 2016-03-07 17:29:25 +00:00
parent 23a4bd22c7
commit 4fc874242f
5 changed files with 54 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2016-03-07 Nick Clifton <nickc@redhat.com>
PR binutils/19775
* archive.c (bfd_generic_openr_next_archived_file): Allow zero
length elements in the archive.
2016-03-07 Jiong Wang <jiong.wang@arm.com>
* elfnn-aarch64.c (elfNN_aarch64_check_relocs): Always create .got

View File

@ -802,7 +802,7 @@ bfd_generic_openr_next_archived_file (bfd *archive, bfd *last_file)
Note that last_file->origin can be odd in the case of
BSD-4.4-style element with a long odd size. */
filestart += filestart % 2;
if (filestart <= last_file->proxy_origin)
if (filestart < last_file->proxy_origin)
{
/* Prevent looping. See PR19256. */
bfd_set_error (bfd_error_malformed_archive);

View File

@ -1,3 +1,10 @@
2016-03-07 Nick Clifton <nickc@redhat.com>
PR binutils/19775
* testsuite/binutils-all/ar.exp (proc empty_archive): New proc.
Run the new proc.
* testsuite/binutils-all/empty: New, empty, file.
2016-03-04 Matthew Wahab <matthew.wahab@arm.com>
* readelf.c (arm_attry_tag_FP_arch): Add "NEON for ARMv8.1".

View File

@ -555,6 +555,45 @@ proc move_an_element { } {
pass $testname
}
# PR 19775: Test creating and listing archives with an empty element.
proc empty_archive { } {
global AR
global srcdir
global subdir
set testname "archive with empty element"
# FIXME: There ought to be a way to dynamically create an empty file.
set empty $srcdir/$subdir/empty
if [is_remote host] {
set archive artest.a
set objfile [remote_download host $empty]
remote_file host delete $archive
} else {
set archive tmpdir/artest.a
set objfile $empty
}
remote_file build delete tmpdir/artest.a
set got [binutils_run $AR "-r -c $archive ${objfile}"]
if ![string match "" $got] {
fail $testname
return
}
# This commmand used to fail with: "Malformed archive".
set got [binutils_run $AR "-t $archive"]
if ![string match "empty " $got] {
fail $testname
return
}
pass $testname
}
# Run the tests.
# Only run the bfdtest checks if the programs exist. Since these
@ -574,6 +613,7 @@ argument_parsing
deterministic_archive
delete_an_element
move_an_element
empty_archive
if { [is_elf_format]
&& ![istarget "*-*-hpux*"]

View File