Program: 52445
Project: 52445
Buggy source:
private void processBlock(){
  if (currentBlockOffset < BLOCK_SIZE) {
    currentBlock[currentBlockOffset]=1;
    for (int i=currentBlockOffset + 1; i < BLOCK_SIZE; i++) {
      currentBlock[i]=0;
    }
  }
  final long t0=0xffffffffL & Pack.littleEndianToInt(currentBlock,0);
  final long t1=0xffffffffL & Pack.littleEndianToInt(currentBlock,4);
  final long t2=0xffffffffL & Pack.littleEndianToInt(currentBlock,8);
  final long t3=0xffffffffL & Pack.littleEndianToInt(currentBlock,12);
  h0+=t0 & 0x3ffffff;
  h1+=(((t1 << 32) | t0) >>> 26) & 0x3ffffff;
  h2+=(((t2 << 32) | t1) >>> 20) & 0x3ffffff;
  h3+=(((t3 << 32) | t2) >>> 14) & 0x3ffffff;
  h4+=(t3 >>> 8);
  if (currentBlockOffset == BLOCK_SIZE) {
    h4+=(1 << 24);
  }
  long tp0=mul32x32_64(h0,r0) + mul32x32_64(h1,s4) + mul32x32_64(h2,s3)+ mul32x32_64(h3,s2)+ mul32x32_64(h4,s1);
  long tp1=mul32x32_64(h0,r1) + mul32x32_64(h1,r0) + mul32x32_64(h2,s4)+ mul32x32_64(h3,s3)+ mul32x32_64(h4,s2);
  long tp2=mul32x32_64(h0,r2) + mul32x32_64(h1,r1) + mul32x32_64(h2,r0)+ mul32x32_64(h3,s4)+ mul32x32_64(h4,s3);
  long tp3=mul32x32_64(h0,r3) + mul32x32_64(h1,r2) + mul32x32_64(h2,r1)+ mul32x32_64(h3,r0)+ mul32x32_64(h4,s4);
  long tp4=mul32x32_64(h0,r4) + mul32x32_64(h1,r3) + mul32x32_64(h2,r2)+ mul32x32_64(h3,r1)+ mul32x32_64(h4,r0);
  long b;
  h0=(int)tp0 & 0x3ffffff;
  b=(tp0 >>> 26);
  tp1+=b;
  h1=(int)tp1 & 0x3ffffff;
  b=((tp1 >>> 26) & 0xffffffff);
  tp2+=b;
  h2=(int)tp2 & 0x3ffffff;
  b=((tp2 >>> 26) & 0xffffffff);
  tp3+=b;
  h3=(int)tp3 & 0x3ffffff;
  b=(tp3 >>> 26);
  tp4+=b;
  h4=(int)tp4 & 0x3ffffff;
  b=(tp4 >>> 26);
  h0+=b * 5;
}

Fixed version (ground truth):
private void processBlock(){
  if (currentBlockOffset < BLOCK_SIZE) {
    currentBlock[currentBlockOffset]=1;
    for (int i=currentBlockOffset + 1; i < BLOCK_SIZE; i++) {
      currentBlock[i]=0;
    }
  }
  final long t0=0xffffffffL & Pack.littleEndianToInt(currentBlock,0);
  final long t1=0xffffffffL & Pack.littleEndianToInt(currentBlock,4);
  final long t2=0xffffffffL & Pack.littleEndianToInt(currentBlock,8);
  final long t3=0xffffffffL & Pack.littleEndianToInt(currentBlock,12);
  h0+=t0 & 0x3ffffff;
  h1+=(((t1 << 32) | t0) >>> 26) & 0x3ffffff;
  h2+=(((t2 << 32) | t1) >>> 20) & 0x3ffffff;
  h3+=(((t3 << 32) | t2) >>> 14) & 0x3ffffff;
  h4+=(t3 >>> 8);
  if (currentBlockOffset == BLOCK_SIZE) {
    h4+=(1 << 24);
  }
  long tp0=mul32x32_64(h0,r0) + mul32x32_64(h1,s4) + mul32x32_64(h2,s3)+ mul32x32_64(h3,s2)+ mul32x32_64(h4,s1);
  long tp1=mul32x32_64(h0,r1) + mul32x32_64(h1,r0) + mul32x32_64(h2,s4)+ mul32x32_64(h3,s3)+ mul32x32_64(h4,s2);
  long tp2=mul32x32_64(h0,r2) + mul32x32_64(h1,r1) + mul32x32_64(h2,r0)+ mul32x32_64(h3,s4)+ mul32x32_64(h4,s3);
  long tp3=mul32x32_64(h0,r3) + mul32x32_64(h1,r2) + mul32x32_64(h2,r1)+ mul32x32_64(h3,r0)+ mul32x32_64(h4,s4);
  long tp4=mul32x32_64(h0,r4) + mul32x32_64(h1,r3) + mul32x32_64(h2,r2)+ mul32x32_64(h3,r1)+ mul32x32_64(h4,r0);
  h0=(int)tp0 & 0x3ffffff;
  tp1+=(tp0 >>> 26);
  h1=(int)tp1 & 0x3ffffff;
  tp2+=(tp1 >>> 26);
  h2=(int)tp2 & 0x3ffffff;
  tp3+=(tp2 >>> 26);
  h3=(int)tp3 & 0x3ffffff;
  tp4+=(tp3 >>> 26);
  h4=(int)tp4 & 0x3ffffff;
  h0+=(int)(tp4 >>> 26) * 5;
  h1+=(h0 >>> 26);
  h0&=0x3ffffff;
}