The following input crashes kstool.
kstool arm64 "nop;b.ne{;;nop;0:ffff{;X;{;nop;{;;nop;0xfffffffffffffff:"
It then tries to read outside read outside the bounds of Instances based on the value of LocalLabelVal.
The code should probably be changed to check that LocalLabelVal is in bounds.
It generates the following assert when compiling in debug mode.
kstool: ../llvm/include/llvm/ADT/DenseMap.h:484: bool llvm::DenseMapBase<llvm::DenseMap<unsigned int, llvm::MCLabel *, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel *> >, unsigned int, llvm::MCLabel *, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel *> >::LookupBucketFor(const LookupKeyT &, const BucketT *&) const [DerivedT = llvm::DenseMap<unsigned int, llvm::MCLabel *, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel *> >, KeyT = unsigned int, ValueT = llvm::MCLabel *, KeyInfoT = llvm::DenseMapInfo<unsigned int>, BucketT = llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel *>, LookupKeyT = unsigned int]: Assertion `!KeyInfoT::isEqual(Val, EmptyKey) && !KeyInfoT::isEqual(Val, TombstoneKey) && "Empty/Tombstone value shouldn't be inserted into map!"' failed.
Program received signal SIGABRT, Aborted.
#0 0x00007ffff71a2418 in __GI_raise (sig=sig@entry=0x6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1 0x00007ffff71a401a in __GI_abort () at abort.c:89
#2 0x00007ffff719abd7 in __assert_fail_base (fmt=<optimized out>,
assertion=assertion@entry=0x7fec5b "!KeyInfoT::isEqual(Val, EmptyKey) && !KeyInfoT::isEqual(Val, TombstoneKey) && \"Empty/Tombstone value shouldn't be inserted into map!\"", file=file@entry=0x7fece1 "../llvm/include/llvm/ADT/DenseMap.h", line=line@entry=0x1e4,
function=function@entry=0x803fba "bool llvm::DenseMapBase<llvm::DenseMap<unsigned int, llvm::MCLabel *, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel *> >, unsigned int, llvm::MCLabel *, llvm"...) at assert.c:92
#3 0x00007ffff719ac82 in __GI___assert_fail (
assertion=0x7fec5b "!KeyInfoT::isEqual(Val, EmptyKey) && !KeyInfoT::isEqual(Val, TombstoneKey) && \"Empty/Tombstone value shouldn't be inserted into map!\"", file=0x7fece1 "../llvm/include/llvm/ADT/DenseMap.h", line=0x1e4,
function=0x803fba "bool llvm::DenseMapBase<llvm::DenseMap<unsigned int, llvm::MCLabel *, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel *> >, unsigned int, llvm::MCLabel *, llvm"...) at assert.c:101
#4 0x000000000049d2f8 in llvm::DenseMapBase<llvm::DenseMap<unsigned int, llvm::MCLabel*, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel*> >, unsigned int, llvm::MCLabel*, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel*> >::LookupBucketFor<unsigned int> (this=0x7fffffffd3f0, Val=@0x7fffffffbd24: 0xffffffff, FoundBucket=@0x7fffffffbc30: 0x7fffffffbc60)
at ../llvm/include/llvm/ADT/DenseMap.h:482
#5 0x000000000049d198 in llvm::DenseMapBase<llvm::DenseMap<unsigned int, llvm::MCLabel*, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel*> >, unsigned int, llvm::MCLabel*, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel*> >::LookupBucketFor<unsigned int> (this=0x7fffffffd3f0, Val=@0x7fffffffbd24: 0xffffffff, FoundBucket=@0x7fffffffbc80: 0x7fffffffbca8)
at ../llvm/include/llvm/ADT/DenseMap.h:521
#6 0x000000000049d123 in llvm::DenseMapBase<llvm::DenseMap<unsigned int, llvm::MCLabel*, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel*> >, unsigned int, llvm::MCLabel*, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPcreateDirectionalLocalSymbolair<unsigned int, llvm::MCLabel*> >::FindAndConstruct (this=0x7fffffffd3f0, Key=@0x7fffffffbd24: 0xffffffff) at ../llvm/include/llvm/ADT/DenseMap.h:227
#7 0x000000000049308d in llvm::DenseMapBase<llvm::DenseMap<unsigned int, llvm::MCLabel*, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel*> >, unsigned int, llvm::MCLabel*, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, llvm::MCLabel*> >::operator[] (this=0x7fffffffd3f0, Key=@0x7fffffffbd24: 0xffffffff) at ../llvm/include/llvm/ADT/DenseMap.h:234
#8 0x000000000048e230 in llvm::MCContext::NextInstance (this=0x7fffffffd110, LocalLabelVal=0xffffffff) at ../llvm/lib/MC/MCContext.cpp:226
#9 0x000000000048e49f in llvm::MCContext::createDirectionalLocalSymbol (this=0x7fffffffd110, LocalLabelVal=0xffffffff)
at ../llvm/lib/MC/MCContext.cpp:248
#10 0x00000000004ae436 in (anonymous namespace)::AsmParser::parseStatement (this=0xe7d170, Info=..., SI=0x0, Address=@0x7fffffffcee0: 0x0)
at ../llvm/lib/MC/MCParser/AsmParser.cpp:1551
#11 0x00000000004a3c8c in (anonymous namespace)::AsmParser::Run (this=0xe7d170, NoInitialTextSection=0x0, Address=0x0, NoFinalize=0x0)
at ../llvm/lib/MC/MCParser/AsmParser.cpp:705
#12 0x000000000046ded3 in ks_asm (ks=0xe765e0, assembly=0x7fffffffe0b1 "nop;b.ne{;;nop;0:ffff{;X;{;nop;{;;nop;0x", 'f' <repeats 15 times>, ":",
address=0x0, insn=0x7fffffffdc20, insn_size=0x7fffffffdc18, stat_count=0x7fffffffdc28) at ../llvm/keystone/ks.cpp:547
#13 0x000000000046b67c in main (argc=0x3, argv=0x7fffffffdd48) at ../kstool/kstool.cpp:211
#14 0x00007ffff718d830 in __libc_start_main (main=0x46af90 <main(int, char**)>, argc=0x3, argv=0x7fffffffdd48, init=<optimized out>,
fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffdd38) at ../csu/libc-start.c:291
#15 0x000000000046aeb9 in _start ()