Program: 173623
Project: 173623
Buggy source:
/** 
 * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element)
 */
public void configureFromXML(Tag tag) throws ConfigurationException {
  TrainType defaultType=null;
  TrainType newType;
  Tag defaultsTag=tag.getChild("String_Node_Str");
  if (defaultsTag != null) {
    defaultType=new TrainType(false);
    defaultType.configureFromXML(defaultsTag);
  }
  List<Tag> typeTags=tag.getChildren("String_Node_Str");
  for (  Tag typeTag : typeTags) {
    if (defaultType != null) {
      newType=(TrainType)defaultType.clone();
      if (newType == null) {
        throw new ConfigurationException("String_Node_Str" + defaultType.getName());
      }
    }
 else {
      newType=new TrainType(true);
    }
    lTrainTypes.add(newType);
    newType.configureFromXML(typeTag);
    mTrainTypes.put(newType.getName(),newType);
  }
  Tag rulesTag=tag.getChild("String_Node_Str");
  if (rulesTag != null) {
    gameManager.setGameParameter(GameDef.Parm.FIXED_PRICE_TRAINS_BETWEEN_PRESIDENTS,rulesTag.getChild("String_Node_Str") != null);
  }
  for (  TrainTypeI type : lTrainTypes) {
    if (type.getReleasedTrainTypeNames() != null) {
      List<TrainTypeI> rtts=new ArrayList<TrainTypeI>(2);
      for (      String ttName : type.getReleasedTrainTypeNames().split("String_Node_Str")) {
        rtts.add(mTrainTypes.get(ttName));
      }
      type.setReleasedTrainTypes(rtts);
    }
    if (type.getRustedTrainTypeName() != null) {
      type.setRustedTrainType(mTrainTypes.get(type.getRustedTrainTypeName()));
      mTrainTypes.get(type.getRustedTrainTypeName()).setPermanent(false);
    }
  }
  Tag removeTrainTag=tag.getChild("String_Node_Str");
  if (removeTrainTag != null) {
    removeTrain=true;
  }
}

Fixed version (ground truth):
/** 
 * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element)
 */
public void configureFromXML(Tag tag) throws ConfigurationException {
  TrainType defaultType=null;
  TrainType newType;
  Tag defaultsTag=tag.getChild("String_Node_Str");
  if (defaultsTag != null) {
    defaultType=new TrainType(false);
    defaultType.configureFromXML(defaultsTag);
  }
  List<Tag> typeTags=tag.getChildren("String_Node_Str");
  for (  Tag typeTag : typeTags) {
    if (defaultType != null) {
      newType=(TrainType)defaultType.clone();
      if (newType == null) {
        throw new ConfigurationException("String_Node_Str" + defaultType.getName());
      }
    }
 else {
      newType=new TrainType(true);
    }
    lTrainTypes.add(newType);
    newType.configureFromXML(typeTag);
    mTrainTypes.put(newType.getName(),newType);
  }
  Tag rulesTag=tag.getChild("String_Node_Str");
  if (rulesTag != null) {
    trainPriceAtFaceValueIfDifferentPresidents=rulesTag.getChild("String_Node_Str") != null;
  }
  for (  TrainTypeI type : lTrainTypes) {
    if (type.getReleasedTrainTypeNames() != null) {
      List<TrainTypeI> rtts=new ArrayList<TrainTypeI>(2);
      for (      String ttName : type.getReleasedTrainTypeNames().split("String_Node_Str")) {
        rtts.add(mTrainTypes.get(ttName));
      }
      type.setReleasedTrainTypes(rtts);
    }
    if (type.getRustedTrainTypeName() != null) {
      type.setRustedTrainType(mTrainTypes.get(type.getRustedTrainTypeName()));
      mTrainTypes.get(type.getRustedTrainTypeName()).setPermanent(false);
    }
  }
  Tag removeTrainTag=tag.getChild("String_Node_Str");
  if (removeTrainTag != null) {
    removeTrain=true;
  }
}