/* Disassemble from a buffer, for GNU.
- Copyright 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005,
- 2007, 2009 Free Software Foundation, Inc.
+ Copyright (C) 1993-2018 Free Software Foundation, Inc.
This file is part of the GNU opcodes library.
struct disassemble_info *info)
{
unsigned int opb = info->octets_per_byte;
- unsigned int end_addr_offset = length / opb;
- unsigned int max_addr_offset = info->buffer_length / opb;
- unsigned int octets = (memaddr - info->buffer_vma) * opb;
+ size_t end_addr_offset = length / opb;
+ size_t max_addr_offset = info->buffer_length / opb;
+ size_t octets = (memaddr - info->buffer_vma) * opb;
if (memaddr < info->buffer_vma
- || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset)
+ || memaddr - info->buffer_vma > max_addr_offset
+ || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset
+ || (info->stop_vma && (memaddr >= info->stop_vma
+ || memaddr + end_addr_offset > info->stop_vma)))
/* Out of bounds. Use EIO because GDB uses it. */
return EIO;
memcpy (myaddr, info->buffer + octets, length);