From 32d690e7552c90a8c91b378fa26ecfa75e79c690 Mon Sep 17 00:00:00 2001 From: George Rimar Date: Tue, 2 Jul 2019 12:58:37 +0000 Subject: [PATCH] [Object/invalid.test] - Convert Object/corrupt.test to YAML and merge the result into invalid.test Object/corrupt.test has the same purpose as Object/invalid.test: it tests the behavior on invalid inputs. In this patch I converted it to YAML, merged into invalid.test, added comments and removed a few precompiled binaries. Differential revision: https://reviews.llvm.org/D63927 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364916 91177308-0d34-0410-b5e6-96231b3b80d8 --- ...pt-invalid-dynamic-table-offset.elf.x86-64 | Bin 1688 -> 0 bytes ...rupt-invalid-dynamic-table-size.elf.x86-64 | Bin 1736 -> 0 bytes ...invalid-dynamic-table-too-large.elf.x86-64 | Bin 1688 -> 0 bytes .../corrupt-invalid-virtual-addr.elf.x86-64 | Bin 1720 -> 0 bytes test/Object/Inputs/corrupt-version.elf-x86_64 | Bin 5200 -> 0 bytes test/Object/Inputs/corrupt.elf-x86-64 | Bin 1024 -> 0 bytes test/Object/corrupt.test | 65 ------ test/Object/invalid.test | 197 ++++++++++++++++++ 8 files changed, 197 insertions(+), 65 deletions(-) delete mode 100755 test/Object/Inputs/corrupt-invalid-dynamic-table-offset.elf.x86-64 delete mode 100755 test/Object/Inputs/corrupt-invalid-dynamic-table-size.elf.x86-64 delete mode 100755 test/Object/Inputs/corrupt-invalid-dynamic-table-too-large.elf.x86-64 delete mode 100755 test/Object/Inputs/corrupt-invalid-virtual-addr.elf.x86-64 delete mode 100644 test/Object/Inputs/corrupt-version.elf-x86_64 delete mode 100644 test/Object/Inputs/corrupt.elf-x86-64 delete mode 100644 test/Object/corrupt.test diff --git a/test/Object/Inputs/corrupt-invalid-dynamic-table-offset.elf.x86-64 b/test/Object/Inputs/corrupt-invalid-dynamic-table-offset.elf.x86-64 deleted file mode 100755 index d164d8243d5ce90ac25a48f9bfad4a6ad3518679..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1688 zcmcIk%}OId5U#|ZRpTMb9u!s(@h004z34@<{<5H+b`OFuPBy^^W&)W}lGElfa?B%m z@DV)t7`}o}5bK+%PqVWV1jT}$uluY1x~jXY=kNZ}K|Yrg+L&z1>qw+*j@}q&fZLRD z{mx23CY2u7RyKDUAB`tY*%&b9s!O*a?};u#O7 zBi@>h$UKey50FPuo(Apte_haJ@n1*q;?=5t8xZ)&aZ zvKb`qPD5PX59{&BZ(RNn7uHo2`4#OEJB@f8*Mg?@VO!G`Py?(N)&=q0BEXL`Wxcar zW|bSRx31L%k#%Fs#A~n*+|Y)aWBk79iL02TX7o#Z)**N_*7eJKrvTz1qmI;;cA({N zi}mtgdcJe!$Nk%HM$S}=snqkGw<%EHu%+XFQ76`XuO9yktdTax|CVy32XOfP^>+MN6_FCIvIE`&GZL>aLpkcG!AXE|r8XUJn^B;5o5{5^I&305T)){fksU7lU2_Xul!Vq)Rphh{Rni- z)94vM9(6rA^WXwpQ(b;vkDrk7_;>-ov4EE|i8@J~#}Y;DEQ_){9_C7=iQf-#aDO-# z?tiL0VppfEzboLDkt>*}J@xRn2H(w(JYkz2ioG%XIlZa*{s-VJkMse)KmH`$!9}vw zaE-;tJB&7{`mr4qJxv;Hy@7P-c~S|cP?{rT1RooD9!Sr zxO9+rTsQsVaKcw#JHzaJkb3v1FRmA7ym@Qg7vfD))qmOaxx1va+1HDPk7?rWGF=H@}|49xOb)_ z%4ifT|CpZZwBa*An6msEbw53IL6^lZOyI?9)cwd8&#Q%@7e;<3QYxr3DvllJi+t!~ zA6bSofi2noipfwu8}h9C=ASeEiy?BrhUQO3@ApN%kJ^BHhsSc!zN#-(T&40tN-Qsz zF9`3A_l5mroja~Mi~l--7w^Z(;m)u9?~^aaMU8GGPVY-xy%&U0M_ka38tx*vcG$<- z??xxQYzK+E*AmzC!)844TbJkJ!lsHMzotE6uN9BuTF|Av*;X|IYJl~^x*(oe2KaHN ztasK+NxAWQ>swtASvM9Yj=?@~LmO(2`G=+_u3(ay(U19Ahv3mz*N^X=0*J?qI#OHO zftJ55)(hW1>xS#&{_Qs-r>aFN>iN#Q6sT|9()nlAiI}g|<9~q|X=DDylp~%0Nc~w$ p9T?d)J>Cr{?w|L6pd8n3Q)4I_xjas4KYcCVl*`hu8(Din{{RcSY1#k) diff --git a/test/Object/Inputs/corrupt-invalid-virtual-addr.elf.x86-64 b/test/Object/Inputs/corrupt-invalid-virtual-addr.elf.x86-64 deleted file mode 100755 index 58d995933ecadffe435c6044763bc67adaa41d63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1720 zcmcIky-piJ5FY=KKuqDF6dk3zZdnr}@U6z_WP`avL)7*LdX*_Y!=7_Oi<06>YA&643?ME1n(i zi+C909z}*Xfvwy9YJMuKhJ5Sk)Dw@4Uo%7u*x2-bc7MN!x1=BN-Qg!W>3{94H(aA} zOGtmbYMOs8$Gexx3zE+#(p;1eyh{=PYz{BX&F<&J*9Y%+=I6~N;V==W=@i!)MR76^ z7xk0SokV92*W5f02k~h?^6pVjTsMfjvsutPJr);tRg?s69T7*p*?d+idcwQg3*7=W z!g^xe5WiRm`0?iaKd_#bmCM%ScdHvB>&mv7?ZGi{OFz^k^#9r}0rQF!1-%NVNz>J^R3r0`+ArAOE2`vFHEl(NC~P z-WdOB&XJG*QT;_ny)^Q|^ym{fBk#}r?;CH+Qh06`+DI8c$fxCv(!6_i=?5d*SyIP& F{cnshZSw#C diff --git a/test/Object/Inputs/corrupt-version.elf-x86_64 b/test/Object/Inputs/corrupt-version.elf-x86_64 deleted file mode 100644 index 1241a27a7bb63020062e0a07f2a14e3fd88fef9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5200 zcmeHL&1)1{5Pvf?tVXVRTaFOwdf?vW?~ zb5IC^ARgRnE-LsZ>|qbV% zrfV*Zj{T6$WDKFr95A33H^iJ_6W=y$HYOM8V2_P5 z7P=!+a4uR9&ud7;w9AUt$L!9i9dSqO-XIK&36&@Dx2i`BUBLL$(7}4WIA_%#v69hV zePY)pFUpz4)CA{9}B@kXQ_N`4*1u3IaO_i?vW#zGK|V)PUN0{`5fT2B9@u7_x`@YvCjgLdA^Tl=ET`=kc4COe;zI*5O5QAMCG;$L6)<&CJz9WstaHgU~lMSkLL zyP*uv2Y@`n=eWwiLrzeu)Bz9PcMIlgqTcUG*=;aBgaCbRsB_dSp|S7h&YWp{SCP5r zn_*djE<^m!lSZSl^jxNU_o$xYGy`b{(hQ^-NHdUTAk9FUfiENj?3?fn3E=1dyb4~u zZ&bm*uQYqk<7jXM*b{Bnk4yALfQvC&>8rLYt!8GaCl_(}O-ebwg8}$n1#F9vDQjSF z8*w~K>gb))^!r}vBdRZ7u~Gay=S!s@&_MlvF2ue%>Hj7ZZ3X2ZtcAsrvHWW2TGM{r zD%HJ;GvGNUqRPdfY%J%3A6%G;aafBb+NZ1{Y_(FEEvhxQQnb!iLSu#Qtjyx7IO9!< zSv8FK$>2VLM*rB_W31Qb(>0Gz8htEki}k?zBR-;vv_l^RAiY!8%kpe#&w3>ui?o~i zv{$y-BMY2?_N-^(LQDNahxV-7?}dkwqCM{iG4F$@M8J9^jXoH)N_*BPalb0^ywoEe z6*=w#Y2FXw(`t_#BTmMzZ1a;WaCd0W`$L>lMc5g4(_X&N_o^&7!?9JB#?=Am-I-?H^=Lax;?ms6y ksL-D8wiznTBcB$*@+N2j%n<79z`1N-0@$7bfosgBJmxKIFp@Zr84 zZsbsU#@{>swuWOo>VQ9ZbzgiQhGOkX#9?zC;{Xc@U|w^wxVB5A<8lT4eT|Z_V(EEH zCwT@A6d?znqnUsfvcGqzb*o9MFgvxwB(S7WvgX;Od~B~swvE+4bWm~74Omzf^&8$$ zWyPiPB(zx&!Cgm5xDaiAu39{3wE1-wWo?j4_9mZf5i zTOH;hqfB|&1 | FileCheck --check-prefix=SECNAME %s - -SECNAME: invalid string offset - - -// Section data offset past end of file. -RUN: not llvm-readobj %p/Inputs/corrupt.elf-x86-64 -sections -section-data \ -RUN: 2>&1 | FileCheck --check-prefix=SECDATA %s - -SECDATA: invalid section offset - - -// Symbol name offset overflows string table. -RUN: not llvm-readobj %p/Inputs/corrupt.elf-x86-64 -symbols \ -RUN: 2>&1 | FileCheck --check-prefix=SYMNAME %s - -SYMNAME: invalid string offset - - -// Version index in .gnu.version overflows the version map. -RUN: not llvm-readobj %p/Inputs/corrupt-version.elf-x86_64 -dt \ -RUN: 2>&1 | FileCheck --check-prefix=VER %s - -VER: error: Invalid version entry - -RUN: not llvm-readobj -l \ -RUN: %p/Inputs/corrupt-invalid-phentsize.elf.x86-64 2>&1 | \ -RUN: FileCheck --check-prefix=PHENTSIZE %s - -PHENTSIZE: invalid e_phentsize - -RUN: llvm-readobj --dynamic-table \ -RUN: %p/Inputs/corrupt-invalid-virtual-addr.elf.x86-64 2>&1 | \ -RUN: FileCheck --check-prefix=VIRTADDR %s - -VIRTADDR: warning: Unable to parse DT_STRTAB: Virtual address is not in any segment - - -RUN: not llvm-readobj --dyn-relocations \ -RUN: %p/Inputs/corrupt-invalid-relocation-size.elf.x86-64 2>&1 | \ -RUN: FileCheck --check-prefix=RELOC %s - -RELOC: Invalid entity size - -RUN: not llvm-readobj --dyn-relocations \ -RUN: %p/Inputs/corrupt-invalid-dynamic-table-size.elf.x86-64 2>&1 | \ -RUN: FileCheck --check-prefix=DYN-TABLE-SIZE %s - -DYN-TABLE-SIZE: Invalid entity size - - -RUN: not llvm-readobj --dyn-relocations \ -RUN: %p/Inputs/corrupt-invalid-dynamic-table-offset.elf.x86-64 2>&1 | \ -RUN: FileCheck --check-prefix=DYN-TABLE-OFFSET %s - -DYN-TABLE-OFFSET: error: PT_DYNAMIC segment offset + size exceeds the size of the file - - -RUN: not llvm-readobj --dyn-relocations \ -RUN: %p/Inputs/corrupt-invalid-dynamic-table-too-large.elf.x86-64 2>&1 | \ -RUN: FileCheck --check-prefix=DYN-TABLE-TOO-LARGE %s - -DYN-TABLE-TOO-LARGE: error: PT_DYNAMIC segment offset + size exceeds the size of the file diff --git a/test/Object/invalid.test b/test/Object/invalid.test index 102a5fcee57..725859dfeb3 100644 --- a/test/Object/invalid.test +++ b/test/Object/invalid.test @@ -339,3 +339,200 @@ Sections: # RUN: not llvm-readobj %p/Inputs/invalid-coff-header-too-small 2>&1 | FileCheck --check-prefix=COFF-HEADER %s # COFF-HEADER: The file was not recognized as a valid object file + +## Check that llvm-readobj reports an error if section name offset +## overflows the section name string table. + +# RUN: yaml2obj %s --docnum=17 -o %t17 +# RUN: not llvm-readobj --sections %t17 2>&1 | FileCheck --check-prefix=BROKEN-SECNAME %s + +## BROKEN-SECNAME: invalid string offset + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .shstrtab + Type: SHT_STRTAB + Size: 1 + +## Check that llvm-readobj reports an error if a section has a broken offset +## that goes past the end of the file. + +# RUN: yaml2obj %s --docnum=18 -o %t18 +# RUN: not llvm-readobj --sections --section-data %t18 2>&1 \ +# RUN: | FileCheck --check-prefix=BROKEN-SECSHOFFSET %s + +# BROKEN-SECSHOFFSET: invalid section offset + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .foo + Type: SHT_PROGBITS + ShOffset: 0xFFFF0000 + +## Check that llvm-readobj reports an error if symbol name +## offset goes past the end of the symbol string table. + +# RUN: yaml2obj %s --docnum=19 -o %t19 +# RUN: not llvm-readobj --symbols %t19 2>&1 | FileCheck --check-prefix=INVALID-SYM-NAME %s + +# INVALID-SYM-NAME: error: Invalid data was encountered while parsing the file + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .strtab + Type: SHT_STRTAB + Size: 1 +Symbols: + - Name: foo + +## Version index in .gnu.version overflows the version map. +## Check llvm-readobj reports it. + +# RUN: yaml2obj %s --docnum=20 -o %t20 +# RUN: not llvm-readobj -dt %t20 2>&1 | FileCheck --check-prefix=INVALID-VERSION %s + +# INVALID-VERSION: error: Invalid version entry + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Sections: + - Name: .gnu.version + Type: SHT_GNU_versym + Entries: [ 0xFF ] +DynamicSymbols: + - Name: foo + +## ELF header contains e_phentsize field with a value != sizeof(Elf_Phdr). +## Check llvm-readobj reports it. + +# RUN: not llvm-readobj -l %p/Inputs/corrupt-invalid-phentsize.elf.x86-64 2>&1 \ +# RUN: | FileCheck --check-prefix=PHENTSIZE %s + +# PHENTSIZE: invalid e_phentsize + +## The dynamic table contains DT_STRTAB with a value that is not in any loadable segment. +## Check llvm-readobj reports it. + +# RUN: yaml2obj %s --docnum=21 -o %t21 +# RUN: llvm-readobj --dynamic-table %t21 2>&1 | FileCheck --check-prefix=INVALID-DTSTRTAB %s + +# INVALID-DTSTRTAB: warning: Unable to parse DT_STRTAB: Virtual address is not in any segment + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .dynamic + Type: SHT_DYNAMIC + Address: 0x1000 + Entries: + - Tag: DT_STRTAB + Value: 0xFFFF0000 + - Tag: DT_NULL + Value: 0x0 +ProgramHeaders: + - Type: PT_LOAD + VAddr: 0x1000 + Sections: + - Section: .dynamic + +## Check that llvm-readobj reports an error when a dynamic relocation section +## has sh_entsize field with size != sizeof(Elf_Rela). + +# RUN: not llvm-readobj --dyn-relocations \ +# RUN: %p/Inputs/corrupt-invalid-relocation-size.elf.x86-64 2>&1 \ +# RUN: | FileCheck --check-prefix=RELOC-BROKEN-ENTSIZE %s + +# RELOC-BROKEN-ENTSIZE: Invalid entity size + +## Check that llvm-readobj reports an error when .dynamic section has an invalid +## size, which isn't a multiple of the dynamic entry size. + +# RUN: yaml2obj %s --docnum=22 -o %t22 +# RUN: not llvm-readobj --dyn-relocations %t22 2>&1 | FileCheck --check-prefix=DYN-TABLE-SIZE %s + +# DYN-TABLE-SIZE: Invalid entity size + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .dynamic + Type: SHT_DYNAMIC + Content: "00" + +## PT_DYNAMIC's p_offset field is so large that p_offset + p_filesz is larger +## than the object size. Check llvm-readobj reports it. + +# RUN: yaml2obj %s --docnum=23 -o %t23 +# RUN: not llvm-readobj --dyn-relocations %t23 2>&1 | FileCheck --check-prefix=DYN-TABLE-PHDR %s + +# DYN-TABLE-PHDR: error: PT_DYNAMIC segment offset + size exceeds the size of the file + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .dynamic + Type: SHT_DYNAMIC + Entries: + - Tag: DT_NULL + Value: 0 +ProgramHeaders: + - Type: PT_DYNAMIC + Offset: 0xffff0000 + Sections: + - Section: .dynamic + +## PT_DYNAMIC's p_filesz field is so large that p_offset + p_filesz is larger +## than the object size. Check llvm-readobj reports it. + +# RUN: yaml2obj %s --docnum=24 -o %t24 +# RUN: not llvm-readobj --dyn-relocations %t24 2>&1 \ +# RUN: | FileCheck --check-prefix=DYN-TABLE-PHDR %s + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .dynamic + Type: SHT_DYNAMIC + Entries: + - Tag: DT_NULL + Value: 0 +ProgramHeaders: + - Type: PT_DYNAMIC + FileSize: 0xffff0000 + Sections: + - Section: .dynamic -- 2.50.1