Program: 83926
Project: 83926
Buggy source:
public byte[] uncompress(ByteBuffer org,byte[] ref_data,Inflater inflater) throws IOException {
  ByteArrayOutputStream baos=new ByteArrayOutputStream();
  int ref_data_offset=0;
  while (org.hasRemaining()) {
    int meth=org.get();
    int meth_major=meth >> 3;
switch (meth_major) {
case CHUNK_METHOD_DEFLATE:
{
        int rskip_spec=meth & 7;
        int comp_data_size=org.getChar();
        int rskip=spec_to_rskip(rskip_spec);
        ref_data_offset+=rskip;
        int dict_size=Math.min(WINDOW_SIZE,ref_data.length - ref_data_offset);
        Dictionary dict=new Dictionary(ref_data,ref_data_offset,dict_size);
        int before=baos.size();
        DZUtil.inflate(inflater,org,comp_data_size,baos,dict);
        int after=baos.size();
      }
    break;
case CHUNK_METHOD_PREFIX_COPY:
{
    if ((meth & 7) != 0)     throw new IOException("String_Node_Str" + meth);
    int comp_data_size=org.getChar();
    if (comp_data_size != 2)     throw new IOException("String_Node_Str" + comp_data_size);
    int copy_length=1 + org.getChar();
    baos.write(ref_data,ref_data_offset,copy_length);
    ref_data_offset+=copy_length;
  }
break;
case CHUNK_METHOD_OFFSET_COPY:
{
if ((meth & 7) != 0) throw new IOException("String_Node_Str" + meth);
int comp_data_size=org.getChar();
if (comp_data_size != 4) throw new IOException("String_Node_Str" + comp_data_size);
int offset=1 + org.getChar();
int copy_length=1 + org.getChar();
ref_data_offset+=offset;
baos.write(ref_data,ref_data_offset,copy_length);
ref_data_offset+=copy_length;
}
break;
default :
throw new IOException("String_Node_Str" + meth);
}
}
return baos.toByteArray();
}

Fixed version (ground truth):
public byte[] uncompress(ByteBuffer org,byte[] ref_data,Inflater inflater) throws IOException {
  ByteArrayOutputStream baos=new ByteArrayOutputStream();
  int ref_data_offset=0;
  while (org.hasRemaining()) {
    int meth=org.get();
    int meth_major=meth >> 3;
switch (meth_major) {
case CHUNK_METHOD_DEFLATE:
{
        int rskip_spec=meth & 7;
        int comp_data_size=org.getChar();
        int rskip=spec_to_rskip(rskip_spec);
        ref_data_offset=Math.min(ref_data_offset + rskip,ref_data.length);
        int dict_size=Math.min(WINDOW_SIZE,ref_data.length - ref_data_offset);
        Dictionary dict=new Dictionary(ref_data,ref_data_offset,dict_size);
        int before=baos.size();
        DZUtil.inflate(inflater,org,comp_data_size,baos,dict);
        int after=baos.size();
      }
    break;
case CHUNK_METHOD_PREFIX_COPY:
{
    if ((meth & 7) != 0)     throw new IOException("String_Node_Str" + meth);
    int comp_data_size=org.getChar();
    if (comp_data_size != 2)     throw new IOException("String_Node_Str" + comp_data_size);
    int copy_length=1 + org.getChar();
    baos.write(ref_data,ref_data_offset,copy_length);
    ref_data_offset+=copy_length;
  }
break;
case CHUNK_METHOD_OFFSET_COPY:
{
if ((meth & 7) != 0) throw new IOException("String_Node_Str" + meth);
int comp_data_size=org.getChar();
if (comp_data_size != 4) throw new IOException("String_Node_Str" + comp_data_size);
int offset=1 + org.getChar();
int copy_length=1 + org.getChar();
ref_data_offset+=offset;
baos.write(ref_data,ref_data_offset,copy_length);
ref_data_offset+=copy_length;
}
break;
default :
throw new IOException("String_Node_Str" + meth);
}
}
return baos.toByteArray();
}