1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
## These test checks that llvm-objdump will not crash with malformed archive
## files. The check line is not all that important but the bug fixes to
## make sure llvm-objdump is robust is what matters.
## Check we report an error when unable to read the size field on an archive as an integer.
## Check two cases: a) the first member is valid, but the second is not, and b) both are invalid.
# RUN: yaml2obj --docnum=1 -DFIRST="Size: '1%'" %s -o %t.libbogus1a.a
# RUN: not llvm-objdump --macho --archive-headers %t.libbogus1a.a 2>&1 | \
# RUN: FileCheck -check-prefix=BOGUS1 -DVAL='1%' -DOFFSET=8 -DFILE=%t.libbogus1a.a %s
# RUN: yaml2obj --docnum=1 %s -o %t.libbogus1b.a
# RUN: not llvm-objdump --macho --archive-headers %t.libbogus1b.a 2>&1 | \
# RUN: FileCheck -check-prefix=BOGUS1 -DVAL=10% -DOFFSET=68 -DFILE=%t.libbogus1b.a %s
# BOGUS1: '[[FILE]]': truncated or malformed archive (characters in size field in archive member header are not all decimal numbers: '[[VAL]]' for the archive member header at offset [[OFFSET]])
--- !Arch
Members:
- [[FIRST={}]]
- Size: '10%'
## Check we report an error when an archive is truncated and are unable to skip the data of a member and read the next one.
# RUN: yaml2obj --docnum=2 %s -o %t.libbogus2.a
# RUN: not llvm-objdump --macho --archive-headers %t.libbogus2.a 2>&1 | \
# RUN: FileCheck -check-prefix=BOGUS2 -DFILE=%t.libbogus2.a %s
# BOGUS2: '[[FILE]]': truncated or malformed archive (offset to next archive member past the end of the archive after member foo.c)
--- !Arch
Members:
- Name: 'foo.c'
Size: '1'
## Check we report an error when we are unable to read the header of a truncated member (but still are able to read its name).
# RUN: yaml2obj --docnum=3 %s -o %t.libbogus3.a
# RUN: not llvm-objdump --macho --archive-headers %t.libbogus3.a 2>&1 | \
# RUN: FileCheck -check-prefix=BOGUS3 -DFILE=%t.libbogus3.a %s
# BOGUS3: '[[FILE]]': truncated or malformed archive (remaining size of archive too small for next archive member header for foo.c)
--- !Arch
## A single truncated member header containing only the name field, which can be still be printed.
Content: "666f6f2e632020202020202020202020" ## "foo.c "
## Check we report an error when the terminator characters of an archive member header are not the correct "`\n" string.
# RUN: yaml2obj --docnum=4 %s -o %t.libbogus4.a
# RUN: not llvm-objdump --macho --archive-headers %t.libbogus4.a 2>&1 | \
# RUN: FileCheck -check-prefix=BOGUS4 -DFILE=%t.libbogus4.a %s
# BOGUS4: '[[FILE]]': truncated or malformed archive (terminator characters in archive member "@\n" not the correct "`\n" values for the archive member header for hello.c)
--- !Arch
Members:
- Name: 'hello.c/'
Terminator: "@\n"
## Document we report an error when parsing a BSD archive and the name of a member contains a leading space.
# RUN: yaml2obj --docnum=5 %s -o %t.libbogus5.a
# RUN: not llvm-objdump --macho --archive-headers %t.libbogus5.a 2>&1 | \
# RUN: FileCheck -check-prefix=BOGUS5 -DFILE=%t.libbogus5.a %s
# BOGUS5: '[[FILE]]': truncated or malformed archive (name contains a leading space for archive member header at offset 68)
--- !Arch
Members:
- Name: '#1/0' ## Triggers parsing as BFD archive.
- Name: ' '
## Check we report an error when a member's long name length characters after
## the "#1/" are not all decimal numbers.
# RUN: yaml2obj --docnum=6 %s -o %t.libbogus6.a
# RUN: not llvm-objdump --macho --archive-headers %t.libbogus6.a 2>&1 | \
# RUN: FileCheck -check-prefix=BOGUS6 -DFILE=%t.libbogus6.a %s
# BOGUS6: '[[FILE]]': truncated or malformed archive (long name length characters after the #1/ are not all decimal numbers: '@123$' for archive member header at offset 8)
--- !Arch
Members:
- Name: '#1/@123$'
## Check we report an error when a member's long name length characters extend past the end of the archive.
# RUN: yaml2obj --docnum=7 %s -o %t.libbogus7.a
# RUN: not llvm-objdump --macho --archive-headers %t.libbogus7.a 2>&1 | \
# RUN: FileCheck -check-prefix=BOGUS7 -DFILE=%t.libbogus7.a %s
# BOGUS7: '[[FILE]]': truncated or malformed archive (long name length: 1 extends past the end of the member or archive for archive member header at offset 8)
--- !Arch
Members:
- Name: '#1/1'
## Check we report an error when members long name length characters after
## the "/" are not all decimal numbers.
# RUN: yaml2obj --docnum=8 %s -o %t.libbogus8.a
# RUN: not llvm-objdump -s %t.libbogus8.a 2>&1 | FileCheck -check-prefix=BOGUS8 -DFILE=%t.libbogus8.a %s
# BOGUS8: [[FILE]](<file index: 1>): truncated or malformed archive (long name offset characters after the '/' are not all decimal numbers: '&a25*' for archive member header at offset 68)
--- !Arch
Members:
## We need the first member to be a valid member to trigger the right error to be reported.
- Name: 'hello.c/'
- Name: "/&a25*"
## Check we report an error when the long name offset goes past the end of the string table.
# RUN: yaml2obj --docnum=9 %s -o %t.libbogus9.a
# RUN: not llvm-objdump -s %t.libbogus9.a 2>&1 | FileCheck -check-prefix=BOGUS9 -DFILE=%t.libbogus9.a %s
# BOGUS9: [[FILE]](<file index: 0>): truncated or malformed archive (long name offset 1 past the end of the string table for archive member header at offset 68)
--- !Arch
Members:
- Name: '//' ## String table.
- Name: '/1'
## Check we report an error when the characters in the UID field of a member header are not all decimal numbers.
# RUN: yaml2obj --docnum=10 %s -o %t.libbogus10.a
# RUN: not llvm-objdump --macho --archive-headers \
# RUN: %t.libbogus10.a 2>&1 | FileCheck -check-prefix=BOGUS10 -DFILE=%t.libbogus10.a %s
# BOGUS10: [[FILE]](hello.c): truncated or malformed archive (characters in UID field in archive member header are not all decimal numbers: '~97&' for the archive member header at offset 8)
--- !Arch
Members:
- Name: hello.c
UID: '~97&'
## Check we report an error when the characters in the GID field of a member header are not all decimal numbers.
# RUN: yaml2obj --docnum=11 %s -o %t.libbogus11.a
# RUN: not llvm-objdump --macho --archive-headers \
# RUN: %t.libbogus11.a 2>&1 | FileCheck -check-prefix=BOGUS11 -DFILE=%t.libbogus11.a %s
# BOGUS11: [[FILE]](hello.c): truncated or malformed archive (characters in GID field in archive member header are not all decimal numbers: '#55!' for the archive member header at offset 8)
--- !Arch
Members:
- Name: hello.c
GID: '#55!'
## Check we report an error when the characters in the AccessMode field of a member header are not all octal numbers.
# RUN: yaml2obj --docnum=12 %s -o %t.libbogus12.a
# RUN: not llvm-objdump --macho --archive-headers \
# RUN: %t.libbogus12.a 2>&1 | FileCheck -check-prefix=BOGUS12 -DFILE=%t.libbogus12.a %s
# BOGUS12: [[FILE]](hello.c): truncated or malformed archive (characters in AccessMode field in archive member header are not all octal numbers: 'Feed' for the archive member header at offset 8)
--- !Arch
Members:
- Name: hello.c
AccessMode: 'Feed'
## Check we report an error when the characters in the LastModified field of a member header are not all decimal numbers.
# RUN: yaml2obj --docnum=13 %s -o %t.libbogus13.a
# RUN: llvm-objdump --macho --archive-headers %t.libbogus13.a 2>&1 | \
# RUN: FileCheck -check-prefix=BOGUS13A %s
# BOGUS13A: ---------- 0/0 0 (date: "1foobar273" contains non-decimal chars) hello.c
--- !Arch
Members:
- Name: hello.c
LastModified: '1foobar273'
# RUN: not llvm-ar tv %t.libbogus13.a 2>&1 | \
# RUN: FileCheck -check-prefix=BOGUS13B %s
# BOGUS13B: error: truncated or malformed archive (characters in LastModified field in archive member header are not all decimal numbers: '1foobar273' for the archive member header at offset 8)
## TODO: add testing for AIX Big archive.
|