Program: 87770
Project: 87770
Buggy source:
@Override public boolean callWithNextKey(MatchStub matchFunction,Collector collector) throws Exception {
  final Environment env=this.environment;
  final OutputCollector oc=(OutputCollector)collector;
  if (this.hashJoin.nextRecord()) {
    final HashJoin.HashBucketIterator buildSideIterator=this.hashJoin.getBuildSideIterator();
    PactRecord probeRecord=this.hashJoin.getCurrentProbeRecord();
    PactRecord nextBuildSidePair=this.nextBuildSideObject;
    if (buildSideIterator.next(nextBuildSidePair)) {
      PactRecord tmpPair=new PactRecord();
      if (buildSideIterator.next(tmpPair)) {
        probeRecord.copyTo(this.probeCopy);
        long r1=probeRecord.getBinaryLength();
        long r2=nextBuildSidePair.getBinaryLength();
        matchFunction.match(probeRecord,nextBuildSidePair,collector);
        env.reportPACTDataStatistics(r1 + r2,oc.getCollectedPactRecordsInBytes());
        probeRecord=new PactRecord();
        this.probeCopy.copyTo(probeRecord);
        r1=probeRecord.getBinaryLength();
        r2=tmpPair.getBinaryLength();
        matchFunction.match(probeRecord,tmpPair,collector);
        env.reportPACTDataStatistics(r1 + r2,oc.getCollectedPactRecordsInBytes());
        tmpPair=new PactRecord();
        while (this.running && buildSideIterator.next(tmpPair)) {
          probeRecord=new PactRecord();
          this.probeCopy.copyTo(probeRecord);
          r1=probeRecord.getBinaryLength();
          r2=tmpPair.getBinaryLength();
          matchFunction.match(probeRecord,tmpPair,collector);
          env.reportPACTDataStatistics(r1 + r2,oc.getCollectedPactRecordsInBytes());
          tmpPair=new PactRecord();
        }
        this.nextBuildSideObject=tmpPair;
      }
 else {
        this.nextBuildSideObject=tmpPair;
        final long r1=probeRecord.getBinaryLength();
        final long r2=nextBuildSidePair.getBinaryLength();
        matchFunction.match(probeRecord,nextBuildSidePair,collector);
        env.reportPACTDataStatistics(r1 + r2,oc.getCollectedPactRecordsInBytes());
      }
    }
    return true;
  }
 else {
    return false;
  }
}

Fixed version (ground truth):
@Override public boolean callWithNextKey(MatchStub matchFunction,Collector collector) throws Exception {
  final Environment env=this.environment;
  if (this.hashJoin.nextRecord()) {
    final HashJoin.HashBucketIterator buildSideIterator=this.hashJoin.getBuildSideIterator();
    PactRecord probeRecord=this.hashJoin.getCurrentProbeRecord();
    PactRecord nextBuildSidePair=this.nextBuildSideObject;
    if (buildSideIterator.next(nextBuildSidePair)) {
      PactRecord tmpPair=new PactRecord();
      if (buildSideIterator.next(tmpPair)) {
        probeRecord.copyTo(this.probeCopy);
        long r1=probeRecord.getBinaryLength();
        long r2=nextBuildSidePair.getBinaryLength();
        matchFunction.match(probeRecord,nextBuildSidePair,collector);
        env.reportPACTDataStatistics(r1 + r2,collector.getCollectedPactRecordsInBytes());
        probeRecord=new PactRecord();
        this.probeCopy.copyTo(probeRecord);
        r1=probeRecord.getBinaryLength();
        r2=tmpPair.getBinaryLength();
        matchFunction.match(probeRecord,tmpPair,collector);
        env.reportPACTDataStatistics(r1 + r2,collector.getCollectedPactRecordsInBytes());
        tmpPair=new PactRecord();
        while (this.running && buildSideIterator.next(tmpPair)) {
          probeRecord=new PactRecord();
          this.probeCopy.copyTo(probeRecord);
          r1=probeRecord.getBinaryLength();
          r2=tmpPair.getBinaryLength();
          matchFunction.match(probeRecord,tmpPair,collector);
          env.reportPACTDataStatistics(r1 + r2,collector.getCollectedPactRecordsInBytes());
          tmpPair=new PactRecord();
        }
        this.nextBuildSideObject=tmpPair;
      }
 else {
        this.nextBuildSideObject=tmpPair;
        final long r1=probeRecord.getBinaryLength();
        final long r2=nextBuildSidePair.getBinaryLength();
        matchFunction.match(probeRecord,nextBuildSidePair,collector);
        env.reportPACTDataStatistics(r1 + r2,collector.getCollectedPactRecordsInBytes());
      }
    }
    return true;
  }
 else {
    return false;
  }
}