Program: 173773
Project: 173773
Buggy source:
/** 
 * Deserialize 
 */
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
  ObjectInputStream.GetField fields=in.readFields();
  trainUniqueId=(String)fields.get("String_Node_Str",trainUniqueId);
  fromName=(String)fields.get("String_Node_Str",fromName);
  fixedCost=fields.get("String_Node_Str",fixedCost);
  hasNoTrains=fields.get("String_Node_Str",hasNoTrains);
  trainsForExchangeUniqueIds=(String[])fields.get("String_Node_Str",trainsForExchangeUniqueIds);
  forcedExchange=fields.get("String_Node_Str",forcedExchange);
  presidentMustAddCash=fields.get("String_Node_Str",presidentMustAddCash);
  presidentMayAddCash=fields.get("String_Node_Str",presidentMayAddCash);
  presidentCashToAdd=fields.get("String_Node_Str",presidentCashToAdd);
  specialPropertyId=fields.get("String_Node_Str",specialPropertyId);
  pricePaid=fields.get("String_Node_Str",pricePaid);
  addedCash=fields.get("String_Node_Str",addedCash);
  exchangedTrainUniqueId=(String)fields.get("String_Node_Str",exchangedTrainUniqueId);
  extraMessage=(String)fields.get("String_Node_Str",extraMessage);
  GameManagerI gameManager=GameManager.getInstance();
  TrainManager trainManager=gameManager.getTrainManager();
  train=trainManager.getTrainByUniqueId(trainUniqueId);
  from=gameManager.getPortfolioByName(fromName);
  if (trainsForExchangeUniqueIds != null && trainsForExchangeUniqueIds.length > 0) {
    trainsForExchange=new ArrayList<TrainI>();
    for (int i=0; i < trainsForExchangeUniqueIds.length; i++) {
      trainsForExchange.add(trainManager.getTrainByUniqueId(trainsForExchangeUniqueIds[i]));
    }
  }
  if (specialPropertyId > 0) {
    specialProperty=(SpecialTrainBuy)SpecialProperty.getByUniqueId(specialPropertyId);
  }
  if (Util.hasValue(exchangedTrainUniqueId)) {
    exchangedTrain=trainManager.getTrainByUniqueId(exchangedTrainUniqueId);
  }
}

Fixed version (ground truth):
/** 
 * Deserialize 
 */
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
  ObjectInputStream.GetField fields=in.readFields();
  trainUniqueId=(String)fields.get("String_Node_Str",trainUniqueId);
  fromName=(String)fields.get("String_Node_Str",fromName);
  fixedCost=fields.get("String_Node_Str",fixedCost);
  hasNoTrains=fields.get("String_Node_Str",hasNoTrains);
  trainsForExchangeUniqueIds=(String[])fields.get("String_Node_Str",trainsForExchangeUniqueIds);
  forcedExchange=fields.get("String_Node_Str",forcedExchange);
  presidentMustAddCash=fields.get("String_Node_Str",presidentMustAddCash);
  presidentMayAddCash=fields.get("String_Node_Str",presidentMayAddCash);
  presidentCashToAdd=fields.get("String_Node_Str",presidentCashToAdd);
  specialPropertyId=fields.get("String_Node_Str",specialPropertyId);
  pricePaid=fields.get("String_Node_Str",pricePaid);
  addedCash=fields.get("String_Node_Str",addedCash);
  exchangedTrainUniqueId=(String)fields.get("String_Node_Str",exchangedTrainUniqueId);
  extraMessage=(String)fields.get("String_Node_Str",extraMessage);
  GameManagerI gameManager=GameManager.getInstance();
  TrainManager trainManager=gameManager.getTrainManager();
  train=trainManager.getTrainByUniqueId(trainUniqueId);
  log.debug("String_Node_Str" + trainUniqueId + "String_Node_Str"+ train,new Exception("String_Node_Str"));
  from=gameManager.getPortfolioByName(fromName);
  if (trainsForExchangeUniqueIds != null && trainsForExchangeUniqueIds.length > 0) {
    trainsForExchange=new ArrayList<TrainI>();
    for (int i=0; i < trainsForExchangeUniqueIds.length; i++) {
      trainsForExchange.add(trainManager.getTrainByUniqueId(trainsForExchangeUniqueIds[i]));
    }
  }
  if (specialPropertyId > 0) {
    specialProperty=(SpecialTrainBuy)SpecialProperty.getByUniqueId(specialPropertyId);
  }
  if (Util.hasValue(exchangedTrainUniqueId)) {
    exchangedTrain=trainManager.getTrainByUniqueId(exchangedTrainUniqueId);
  }
}