Program: 186089
Project: 186089
Buggy source:
/** 
 * Return the specified elements of the list stored at the specified key. Start and end are zero-based indexes. 0 is the first element of the list (the list head), 1 the next element and so on. <p> For example LRANGE foobar 0 2 will return the first three elements of the list. <p> start and end can also be negative numbers indicating offsets from the end of the list. For example -1 is the last element of the list, -2 the penultimate element and so on. <p> <b>Consistency with range functions in various programming languages</b> <p> Note that if you have a list of numbers from 0 to 100, LRANGE 0 10 will return 11 elements, that is, rightmost item is included. This may or may not be consistent with behavior of range-related functions in your programming language of choice (think Ruby's Range.new, Array#slice or Python's range() function). <p> LRANGE behavior is consistent with one of Tcl. <p> <b>Out-of-range indexes</b> <p> Indexes out of range will not produce an error: if start is over the end of the list, or start > end, an empty list is returned. If end is over the end of the list Redis will threat it just like the last element of the list. <p>
 * @param key
 * @param start
 * @param end
 * @return Multi bulk reply, specifically a list of elements in thespecified range.
 */
public List<byte[]> lrange(final byte[] key,final int start,final int end){
  List<ByteBuffer> elements=new LinkedList<ByteBuffer>(this.blockingMultimap.elements(wrap(key)));
  int calculatedStart=RangeUtils.calculateStart(start,elements.size());
  int calculatedEnd=RangeUtils.calculateEnd(end,elements.size());
  try {
    List<ByteBuffer> subList=elements.subList(calculatedStart,calculatedEnd);
    return convert(subList,new ByteBuffer2ByteArrayConverter());
  }
 catch (  IndexOutOfBoundsException e) {
    return Collections.EMPTY_LIST;
  }
}

Fixed version (ground truth):
/** 
 * Return the specified elements of the list stored at the specified key. Start and end are zero-based indexes. 0 is the first element of the list (the list head), 1 the next element and so on. <p> For example LRANGE foobar 0 2 will return the first three elements of the list. <p> start and end can also be negative numbers indicating offsets from the end of the list. For example -1 is the last element of the list, -2 the penultimate element and so on. <p> <b>Consistency with range functions in various programming languages</b> <p> Note that if you have a list of numbers from 0 to 100, LRANGE 0 10 will return 11 elements, that is, rightmost item is included. This may or may not be consistent with behavior of range-related functions in your programming language of choice (think Ruby's Range.new, Array#slice or Python's range() function). <p> LRANGE behavior is consistent with one of Tcl. <p> <b>Out-of-range indexes</b> <p> Indexes out of range will not produce an error: if start is over the end of the list, or start > end, an empty list is returned. If end is over the end of the list Redis will threat it just like the last element of the list. <p>
 * @param key
 * @param start
 * @param end
 * @return Multi bulk reply, specifically a list of elements in thespecified range.
 */
public List<byte[]> lrange(final byte[] key,final long start,final long end){
  List<ByteBuffer> elements=new LinkedList<ByteBuffer>(this.blockingMultimap.elements(wrap(key)));
  int calculatedStart=RangeUtils.calculateStart((int)start,elements.size());
  int calculatedEnd=RangeUtils.calculateEnd((int)end,elements.size());
  try {
    List<ByteBuffer> subList=elements.subList(calculatedStart,calculatedEnd);
    return convert(subList,new ByteBuffer2ByteArrayConverter());
  }
 catch (  IndexOutOfBoundsException e) {
    return Collections.EMPTY_LIST;
  }
}