Program: 155940
Project: 155940
Buggy source:
private int scanPage(int page){
  int n=maxPage;
  while (n <= page) {
    if (offsetMap.length <= n) {
      offsetMap=Arrays.copyOf(offsetMap,page + 1);
    }
    int cslot=n % cachePageId.length;
    cachePageId[cslot]=n;
    try {
      readPage(((long)n) * pageSize,offsetMap[n],cachePageData[cslot]);
    }
 catch (    MalformedInstanceIdException e) {
      long ptr=pointer[0];
      long iid=dumpBuffer.getID(ptr + 1);
      long ciid=iid >>> allignmentBits;
      int ps=(int)(((cidOffset - ciid + pageSize - 1) / (pageSize)));
      long oldIdBase=cidOffset;
      cidOffset-=ps * pageSize;
      long[] noffsetMap=new long[offsetMap.length + ps];
      Arrays.fill(noffsetMap,0,ps,0);
      System.arraycopy(offsetMap,0,noffsetMap,ps,offsetMap.length);
      offsetMap=noffsetMap;
      offsetMap[0]=ptr;
      int savedMaxPage=maxPage;
      boolean savedNestedScan=nestedScan;
      maxPage=0;
      nestedScan=true;
      scanPage(ps - 1);
      ps=(int)(compressID(oldIdBase) / pageSize);
      maxPage=savedMaxPage + ps;
      nestedScan=savedNestedScan;
      page+=ps;
      n+=ps;
      continue;
    }
    long noffs=pointer[0];
    if (noffs >= heap.getAllInstanceDumpBounds().endOffset) {
      scanComplete=true;
    }
    long rid=readID();
    if (rid != -1) {
      long nid=compressID(rid);
      int nn=(int)(nid / pageSize);
      if (offsetMap.length <= nn) {
        offsetMap=Arrays.copyOf(offsetMap,nn + 16);
      }
      for (int i=n + 1; i < nn; ++i) {
        if (offsetMap[i] == 0) {
          offsetMap[i]=-1;
        }
      }
      offsetMap[nn]=noffs;
      maxPage=Math.max(maxPage,nn);
      if (nn < maxPage) {
        if (nestedScan) {
          for (int i=n + 1; i <= page; ++i) {
            offsetMap[i]=-1;
          }
          return page;
        }
 else         if (maxPage == page) {
          return page;
        }
 else {
          throw new IllegalArgumentException("String_Node_Str");
        }
      }
      n=nn;
    }
 else {
      maxPage=n + 1;
      if (offsetMap.length <= maxPage) {
        offsetMap=Arrays.copyOf(offsetMap,maxPage + 1);
      }
      offsetMap[maxPage]=heap.getAllInstanceDumpBounds().endOffset;
      if (n < page) {
        if (nestedScan) {
          for (int i=n + 1; i <= page; ++i) {
            offsetMap[i]=-1;
          }
          return page;
        }
 else {
          throw new IllegalArgumentException("String_Node_Str");
        }
      }
      return n;
    }
  }
  return page;
}

Fixed version (ground truth):
private int scanPage(int page){
  int n=maxPage;
  while (n <= page) {
    if (offsetMap.length <= n) {
      offsetMap=Arrays.copyOf(offsetMap,page + 1);
    }
    int cslot=n % cachePageId.length;
    cachePageId[cslot]=n;
    try {
      readPage(((long)n) * pageSize,offsetMap[n],cachePageData[cslot]);
    }
 catch (    MalformedInstanceIdException e) {
      long ptr=pointer[0];
      long iid=dumpBuffer.getID(ptr + 1);
      long ciid=iid >>> allignmentBits;
      int ps=(int)(((cidOffset - ciid + pageSize - 1) / (pageSize)));
      long oldCidBase=cidOffset;
      cidOffset-=ps * pageSize;
      long[] noffsetMap=new long[offsetMap.length + ps];
      Arrays.fill(noffsetMap,0,ps,0);
      System.arraycopy(offsetMap,0,noffsetMap,ps,offsetMap.length);
      offsetMap=noffsetMap;
      offsetMap[0]=ptr;
      int savedMaxPage=maxPage;
      boolean savedNestedScan=nestedScan;
      maxPage=0;
      nestedScan=true;
      scanPage(ps - 1);
      ps=(int)(compressID(oldCidBase << allignmentBits) / pageSize);
      maxPage=savedMaxPage + ps;
      nestedScan=savedNestedScan;
      page+=ps;
      n+=ps;
      continue;
    }
    long noffs=pointer[0];
    if (noffs >= heap.getAllInstanceDumpBounds().endOffset) {
      scanComplete=true;
    }
    long rid=readID();
    if (rid != -1) {
      long nid=compressID(rid);
      int nn=(int)(nid / pageSize);
      if (offsetMap.length <= nn) {
        offsetMap=Arrays.copyOf(offsetMap,nn + 16);
      }
      for (int i=n + 1; i < nn; ++i) {
        if (offsetMap[i] == 0) {
          offsetMap[i]=-1;
        }
      }
      offsetMap[nn]=noffs;
      maxPage=Math.max(maxPage,nn);
      if (nn < maxPage) {
        if (nestedScan) {
          for (int i=n + 1; i <= page; ++i) {
            offsetMap[i]=-1;
          }
          return page;
        }
 else         if (maxPage == page) {
          return page;
        }
 else {
          throw new IllegalArgumentException("String_Node_Str");
        }
      }
      n=nn;
    }
 else {
      maxPage=n + 1;
      if (offsetMap.length <= maxPage) {
        offsetMap=Arrays.copyOf(offsetMap,maxPage + 1);
      }
      offsetMap[maxPage]=heap.getAllInstanceDumpBounds().endOffset;
      if (n < page) {
        if (nestedScan) {
          for (int i=n + 1; i <= page; ++i) {
            offsetMap[i]=-1;
          }
          return page;
        }
 else {
          throw new IllegalArgumentException("String_Node_Str");
        }
      }
      return n;
    }
  }
  return page;
}