Program: 173551
Project: 173551
Buggy source:
/** 
 * Deserialize 
 */
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
  ObjectInputStream.GetField fields=in.readFields();
  trainUniqueId=(String)fields.get("String_Node_Str",trainUniqueId);
  typeName=(String)fields.get("String_Node_Str",null);
  fromName=(String)fields.get("String_Node_Str",fromName);
  fixedCost=fields.get("String_Node_Str",fixedCost);
  forcedBuyIfNoRoute=fields.get("String_Node_Str",forcedBuyIfNoRoute);
  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);
  GameManager gameManager=GameManager.getInstance();
  TrainManager trainManager=gameManager.getTrainManager();
  CompanyManager companyManager=gameManager.getCompanyManager();
  fromName=companyManager.checkAlias(fromName);
  train=trainManager.getTrainByUniqueId(trainUniqueId);
  if (typeName == null) {
    if (train == null) {
      typeName=trainUniqueId.split("String_Node_Str")[0];
      type=trainManager.getTypeByName(typeName);
    }
 else {
      type=train.getType();
      typeName=type.getName();
    }
  }
 else {
    type=trainManager.getTypeByName(typeName);
  }
  if (trainsForExchangeUniqueIds != null && trainsForExchangeUniqueIds.length > 0) {
    trainsForExchange=new HashSet<Train>();
    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);
  typeName=(String)fields.get("String_Node_Str",null);
  fromName=(String)fields.get("String_Node_Str",fromName);
  fixedCost=fields.get("String_Node_Str",fixedCost);
  forcedBuyIfNoRoute=fields.get("String_Node_Str",forcedBuyIfNoRoute);
  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);
  GameManager gameManager=GameManager.getInstance();
  TrainManager trainManager=gameManager.getTrainManager();
  CompanyManager companyManager=gameManager.getCompanyManager();
  fromName=companyManager.checkAlias(fromName);
  train=trainManager.getTrainByUniqueId(trainUniqueId);
  if (typeName == null) {
    if (train == null) {
      typeName=trainUniqueId.split("String_Node_Str")[0];
      type=trainManager.getTypeByName(typeName);
    }
 else {
      type=train.getType();
      typeName=type.getName();
    }
  }
 else {
    type=trainManager.getTypeByName(typeName);
  }
  from=gameManager.getPortfolioByName(fromName).getParent();
  if (trainsForExchangeUniqueIds != null && trainsForExchangeUniqueIds.length > 0) {
    trainsForExchange=new HashSet<Train>();
    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);
  }
}