Program: 49318
Project: 49318
Buggy source:
/** 
 * WARNING: Should be in sync with   {@link Data#readData(com.hazelcast.nio.ObjectDataInput)}
 */
public boolean readFrom(ByteBuffer source){
  if (data == null) {
    data=new Data();
  }
  if (!isStatusSet(stType)) {
    if (source.remaining() < 4) {
      return false;
    }
    data.type=source.getInt();
    setStatus(stType);
  }
  if (!isStatusSet(stClassId)) {
    if (source.remaining() < 4) {
      return false;
    }
    classId=source.getInt();
    setStatus(stClassId);
    if (classId == Data.NO_CLASS_ID) {
      setStatus(stFactoryId);
      setStatus(stVersion);
      setStatus(stClassDefSize);
      setStatus(stClassDef);
    }
  }
  if (!isStatusSet(stFactoryId)) {
    if (source.remaining() < 4) {
      return false;
    }
    factoryId=source.getInt();
    setStatus(stFactoryId);
  }
  if (!isStatusSet(stVersion)) {
    if (source.remaining() < 4) {
      return false;
    }
    version=source.getInt();
    setStatus(stVersion);
  }
  if (!isStatusSet(stClassDef)) {
    ClassDefinition cd;
    if ((cd=context.lookup(factoryId,classId,version)) != null) {
      data.classDefinition=cd;
      setStatus(stClassDefSize);
      setStatus(stClassDef);
    }
 else {
      if (!isStatusSet(stClassDefSize)) {
        if (source.remaining() < 4) {
          return false;
        }
        classDefSize=source.getInt();
        setStatus(stClassDefSize);
      }
      if (!isStatusSet(stClassDef)) {
        if (source.remaining() < classDefSize) {
          return false;
        }
        final byte[] binary=new byte[classDefSize];
        source.get(binary);
        data.classDefinition=new BinaryClassDefinitionProxy(factoryId,classId,version,binary);
        setStatus(stClassDef);
      }
    }
  }
  if (!isStatusSet(stSize)) {
    if (source.remaining() < 4) {
      return false;
    }
    final int size=source.getInt();
    buffer=ByteBuffer.allocate(size);
    setStatus(stSize);
  }
  if (!isStatusSet(stValue)) {
    IOUtil.copyToHeapBuffer(source,buffer);
    if (buffer.hasRemaining()) {
      return false;
    }
    buffer.flip();
    data.buffer=buffer.array();
    setStatus(stValue);
  }
  if (!isStatusSet(stHash)) {
    if (source.remaining() < 4) {
      return false;
    }
    data.setPartitionHash(source.getInt());
    setStatus(stHash);
  }
  setStatus(stAll);
  return true;
}

Fixed version (ground truth):
/** 
 * WARNING: Should be in sync with   {@link Data#readData(com.hazelcast.nio.ObjectDataInput)}
 */
public boolean readFrom(ByteBuffer source){
  if (data == null) {
    data=new Data();
  }
  if (!isStatusSet(stType)) {
    if (source.remaining() < 4) {
      return false;
    }
    data.type=source.getInt();
    setStatus(stType);
  }
  if (!isStatusSet(stClassId)) {
    if (source.remaining() < 4) {
      return false;
    }
    classId=source.getInt();
    setStatus(stClassId);
    if (classId == Data.NO_CLASS_ID) {
      setStatus(stFactoryId);
      setStatus(stVersion);
      setStatus(stClassDefSize);
      setStatus(stClassDef);
    }
  }
  if (!isStatusSet(stFactoryId)) {
    if (source.remaining() < 4) {
      return false;
    }
    factoryId=source.getInt();
    setStatus(stFactoryId);
  }
  if (!isStatusSet(stVersion)) {
    if (source.remaining() < 4) {
      return false;
    }
    version=source.getInt();
    setStatus(stVersion);
  }
  if (!isStatusSet(stClassDef)) {
    ClassDefinition cd;
    if (!skipClassDef && (cd=context.lookup(factoryId,classId,version)) != null) {
      data.classDefinition=cd;
      skipClassDef=true;
    }
    if (!isStatusSet(stClassDefSize)) {
      if (source.remaining() < 4) {
        return false;
      }
      classDefSize=source.getInt();
      setStatus(stClassDefSize);
    }
    if (!isStatusSet(stClassDef)) {
      if (source.remaining() < classDefSize) {
        return false;
      }
      if (skipClassDef) {
        source.position(classDefSize + source.position());
      }
 else {
        final byte[] binary=new byte[classDefSize];
        source.get(binary);
        data.classDefinition=new BinaryClassDefinitionProxy(factoryId,classId,version,binary);
      }
      setStatus(stClassDef);
    }
  }
  if (!isStatusSet(stSize)) {
    if (source.remaining() < 4) {
      return false;
    }
    final int size=source.getInt();
    buffer=ByteBuffer.allocate(size);
    setStatus(stSize);
  }
  if (!isStatusSet(stValue)) {
    IOUtil.copyToHeapBuffer(source,buffer);
    if (buffer.hasRemaining()) {
      return false;
    }
    buffer.flip();
    data.buffer=buffer.array();
    setStatus(stValue);
  }
  if (!isStatusSet(stHash)) {
    if (source.remaining() < 4) {
      return false;
    }
    data.setPartitionHash(source.getInt());
    setStatus(stHash);
  }
  setStatus(stAll);
  return true;
}