reassign 588925 libarchive1 2.8.3-1
retitle 588925 archive_read_disk_entry_from_file() fails on hppa/sh4 etc.
affects 588925 src:cmake
severity 588925 grave
thanks

Hello,

On antradienis 13 Liepa 2010 16:44:09 dann frazier wrote:
> CPack Error: archive_read_disk_entry_from_file:(Empty error
> message)Function not implemented -20 CPack Error:
> archive_read_disk_entry_from_file:(Empty error message)Function not
> implemented -20 CPack Error: archive_read_disk_entry_from_file:(Empty
> error message)Function not implemented -20 CPack Error:
> archive_read_disk_entry_from_file:(Empty error message)Function not

[..snip..]

This is a libarchive bug. archive_read_disk_entry_from_file() does not work on 
hppa/sh4 at all. libarchive's own testsuite fails on hppa but unfortunately 
packaging ignores that failure and the bug is not caught early.

Check ./libarchive_test debugging session on paer.debian.org (hppa) below. 
Basically llistxattr() fails with "Function not implemented" error (ENOSYS) 
and setup_xattrs() treats it as a fatal error. It should ignore this error 
like it does with ENOTSUP.

While hppa build log is not available, the same error can be seen on sh4 as 
well [1]. Please note that many tests fail with similar extended attr errors 
on those arches.

[1] http://buildd.debian-
ports.org/fetch.php?&pkg=libarchive&ver=2.8.3-1&arch=sh4&stamp=1272046835&file=log&as=raw

$ gdb ./libarchive_test 
GNU gdb (GDB) 7.1-debian
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "hppa-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/modax/src/libarchive-2.8.3/libarchive_test...done.
(gdb) b test_read_disk_entry_from_file
Breakpoint 1 at 0x7392c: file 
libarchive/test/test_read_disk_entry_from_file.c, line 50.
(gdb) b archive_read_disk_entry_from_file
Breakpoint 2 at 0x1d35c: file libarchive/archive_read_disk_entry_from_file.c, 
line 89.
(gdb) r
Starting program: /home/modax/src/libarchive-2.8.3/libarchive_test 
[Thread debugging using libthread_db enabled]

If tests fail or crash, details will be in:
   /tmp/libarchive_test.2010-07-14T23.05.33-000

Reference files will be read from: 
/home/modax/src/libarchive-2.8.3/libarchive/test
Exercising: libarchive 2.8.3
  0: test_acl_basic                                    ok
  1: test_acl_freebsd                                  ok
  2: test_acl_pax                                      ok
  3: test_archive_api_feature                          ok
  4: test_bad_fd                                       ok
  5: test_compat_bzip2                                 ok
  6: test_compat_cpio                                  ok
  7: test_compat_gtar                                  ok
  8: test_compat_gzip                                  ok
  9: test_compat_lzma                                  ok
 10: test_compat_solaris_tar_acl                       ok
 11: test_compat_tar_hardlink                          ok
 12: test_compat_xz                                    ok
 13: test_compat_zip                                   ok
 14: test_empty_write                                  ok
 15: test_entry                                        ok
 16: test_entry_strmode                                ok
 17: test_extattr_freebsd                              ok
 18: test_fuzz                                         ok
 19: test_link_resolver                                ok
 20: test_open_fd                                      ok
 21: test_open_file                                    ok
 22: test_open_filename                                ok
 23: test_pax_filename_encoding                        ok
 24: test_read_compress_program                        ok
 25: test_read_data_large                              ok
 26: test_read_disk                                    ok
 27: test_read_disk_entry_from_file                    
Breakpoint 1, test_read_disk_entry_from_file () at 
libarchive/test/test_read_disk_entry_from_file.c:50
50              assert((a = archive_read_disk_new()) != NULL);
(gdb) c
Continuing.

Breakpoint 2, archive_read_disk_entry_from_file (_a=0x4820068, 
entry=0x4823588, fd=-1, st=0x0)
    at libarchive/archive_read_disk_entry_from_file.c:89
89              struct archive_read_disk *a = (struct archive_read_disk *)_a;
(gdb) n
92              int initial_fd = fd;
(gdb) 
95              archive_clear_error(_a);
(gdb) 
96              path = archive_entry_sourcepath(entry);
(gdb) 
97              if (path == NULL)
(gdb) 
98                      path = archive_entry_pathname(entry);
(gdb) 
116             if (st == NULL) {
(gdb) 
123                     if (fd >= 0) {
(gdb) 
132                     if (!a->follow_symlinks) {
(gdb) 
133                             if (lstat(path, &s) != 0) {
(gdb) 
145                     st = &s;
(gdb) 
147             archive_entry_copy_stat(entry, st);
(gdb) 
150             name = archive_read_disk_uname(_a, archive_entry_uid(entry));
(gdb) 
151             if (name != NULL)
(gdb) 
152                     archive_entry_copy_uname(entry, name);
(gdb) 
153             name = archive_read_disk_gname(_a, archive_entry_gid(entry));
(gdb) 
154             if (name != NULL)
(gdb) 
155                     archive_entry_copy_gname(entry, name);
(gdb) 
165             if (S_ISLNK(st->st_mode)) {
(gdb) 
189             r = setup_acls_posix1e(a, entry, fd);
(gdb) 
190             r1 = setup_xattrs(a, entry, fd);
(gdb) s
setup_xattrs (a=0x4820068, entry=0x4823588, fd=-1) at 
libarchive/archive_read_disk_entry_from_file.c:391
391             path = archive_entry_sourcepath(entry);
(gdb) n
392             if (path == NULL)
(gdb) 
393                     path = archive_entry_pathname(entry);
(gdb) 
395             if (!a->follow_symlinks)
(gdb) 
396                     list_size = llistxattr(path, NULL, 0);
(gdb) 
400             if (list_size == -1) {
(gdb) 
401                     if (errno == ENOTSUP)
(gdb) 
403                     archive_set_error(&a->archive, errno,
(gdb) p perror("failure:")
failure:: Function not implemented
$13 = 0
gdb) p errno
$14 = 251
(gdb) n
405                     return (ARCHIVE_WARN);
(gdb) n
437     }
(gdb) 
archive_read_disk_entry_from_file (_a=0x4820068, entry=0x4823588, fd=-1, 
st=0xfaf016f0)
    at libarchive/archive_read_disk_entry_from_file.c:191
191             if (r1 < r)
(gdb) 
192                     r = r1;
(gdb) 
194             if (initial_fd != fd)
(gdb) 
196             return (r);
(gdb) 
197     }
(gdb) 
test_read_disk_entry_from_file () at 
libarchive/test/test_read_disk_entry_from_file.c:73
73              assertEqualString(archive_entry_uname(entry), "FOO");
(gdb) c
Continuing.
FAIL
 28: test_read_extract                                 ok
 29: test_read_file_nonexistent                        ok
 30: test_read_format_ar                               ok
 31: test_read_format_cpio_bin_be                      ok
 32: test_read_format_cpio_bin_bz2                     ok
 33: test_read_format_cpio_bin                         ok
 34: test_read_format_cpio_bin_gz                      ok
 35: test_read_format_cpio_bin_lzma                    ok
 36: test_read_format_cpio_bin_xz                      ok
 37: test_read_format_cpio_bin_Z                       ok
 38: test_read_format_cpio_odc                         ok
 39: test_read_format_cpio_svr4_bzip2_rpm              ok
 40: test_read_format_cpio_svr4c_Z                     ok
 41: test_read_format_cpio_svr4_gzip                   ok
 42: test_read_format_cpio_svr4_gzip_rpm               ok
 43: test_read_format_empty                            ok
 44: test_read_format_gtar_gz                          ok
 45: test_read_format_gtar_lzma                        ok
 46: test_read_format_gtar_sparse                      ok
 47: test_read_format_iso_gz                           ok
 48: test_read_format_isojoliet_bz2                    ok
 49: test_read_format_isojoliet_long                   ok
 50: test_read_format_isojoliet_rr                     ok
 51: test_read_format_iso_multi_extent                 ok
 52: test_read_format_isorr_bz2                        ok
 53: test_read_format_isorr_ce                         ok
 54: test_read_format_isorr_new_bz2                    ok
 55: test_read_format_isorr_rr_moved                   ok
 56: test_read_format_isozisofs_bz2                    ok
 57: test_read_format_mtree                            ok
 58: test_read_format_pax_bz2                          ok
 59: test_read_format_raw                              ok
 60: test_read_format_tar                              ok
 61: test_read_format_tar_empty_filename               ok
 62: test_read_format_tbz                              ok
 63: test_read_format_tgz                              ok
 64: test_read_format_tlz                              ok
 65: test_read_format_txz                              ok
 66: test_read_format_tz                               ok
 67: test_read_format_xar                              ok
 68: test_read_format_zip                              ok
 69: test_read_large                                   ok
 70: test_read_pax_truncated                           ok
 71: test_read_position                                ok
 72: test_read_truncated                               ok
 73: test_read_uu                                      ok
 74: test_tar_filenames                                ok
 75: test_tar_large                                    ok
 76: test_ustar_filenames                              ok
 77: test_write_compress_bzip2                         ok
 78: test_write_compress                               ok
 79: test_write_compress_gzip                          ok
 80: test_write_compress_lzma                          ok
 81: test_write_compress_program                       ok
 82: test_write_compress_xz                            ok
 83: test_write_disk                                   ok
 84: test_write_disk_failures                          ok
 85: test_write_disk_hardlink                          ok
 86: test_write_disk_perms                             ok
 87: test_write_disk_secure                            ok
 88: test_write_disk_symlink                           ok
 89: test_write_disk_sparse                            ok
 90: test_write_disk_times                             ok
 91: test_write_format_ar                              ok
 92: test_write_format_cpio                            ok
 93: test_write_format_cpio_empty                      ok
 94: test_write_format_cpio_newc                       ok
 95: test_write_format_cpio_odc                        ok
 96: test_write_format_mtree                           ok
 97: test_write_format_pax                             ok
 98: test_write_format_shar_empty                      ok
 99: test_write_format_tar                             ok
100: test_write_format_tar_empty                       ok
101: test_write_format_tar_ustar                       ok
102: test_write_format_zip                             ok
103: test_write_format_zip_empty                       ok
104: test_write_format_zip_no_compression              ok
105: test_write_open_memory                            ok

Totals:
  Tests run:              106
  Tests failed:             1
  Assertions checked: 2823912
  Assertions failed:        1
  Skips reported:          15

Failing tests:
  27: test_read_disk_entry_from_file (1 failures)

Details for failing tests: /tmp/libarchive_test.2010-07-14T23.05.33-000


Program exited with code 01.
(gdb)

$ grep 251 /usr/include/asm/errno.h 
#define ENOSYS          251     /* Function not implemented */
$


-- 
Modestas Vainius <[email protected]>

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to