[X86][Disassembler] Fix a bug when disassembling an empty string
authorFangrui Song <maskray@google.com>
Mon, 13 Jan 2020 18:34:10 +0000 (10:34 -0800)
committerFangrui Song <maskray@google.com>
Mon, 13 Jan 2020 18:42:21 +0000 (10:42 -0800)
commit64a93afc3c630c39e5c583e4f67aef5821d635b6
treec5a68796c0cabeea934fddd88306e4c9d19a8234
parent484a7472f1aa6906f2b66dc33bcf69cc8d5b9f29
[X86][Disassembler] Fix a bug when disassembling an empty string

readPrefixes() assumes insn->bytes is non-empty. The code path is not
exercised in llvm-mc because llvm-mc does not feed empty input to
MCDisassembler::getInstruction().

This bug is uncovered by a5994c789a2982a770254ae1607b5b4cb641f73c.
An empty string did not crash before because the deleted regionReader()
allowed UINT64_C(-1) as insn->readerCursor.

  Bytes.size() <= Address -> R->Base
  0 <= UINT64_C(-1) - UINT32_C(-1)
llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
llvm/unittests/MC/Disassembler.cpp