Program: 173844
Project: 173844
Buggy source:
/** 
 * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element)
 */
public void configureFromXML(Element el) throws ConfigurationException {
  NamedNodeMap nnp=el.getAttributes();
  Pattern namePattern=Pattern.compile("String_Node_Str");
  name=XmlUtils.extractStringAttribute(nnp,"String_Node_Str");
  Matcher m=namePattern.matcher(name);
  if (!m.matches()) {
    throw new ConfigurationException("String_Node_Str" + name);
  }
  letter=m.group(1).charAt(0);
  try {
    number=Integer.parseInt(m.group(2));
  }
 catch (  NumberFormatException e) {
  }
  if (lettersGoHorizontal) {
    row=number;
    column=letter - '@';
    if (tileOrientation == MapHex.EW) {
      x=column;
      y=row / 2;
    }
 else {
      x=column;
      y=(row + 1) / 2;
    }
  }
 else {
    row=letter - '@';
    column=number;
    if (tileOrientation == MapHex.EW) {
      x=(column + (letterAHasEvenNumbers ? 1 : 0)) / 2;
      y=row;
    }
 else {
      x=column;
      y=(row + 1) / 2;
    }
  }
  String sTileId=XmlUtils.extractStringAttribute(nnp,"String_Node_Str");
  if (sTileId != null) {
    try {
      preprintedTileId=Integer.parseInt(sTileId);
    }
 catch (    NumberFormatException e) {
      throw new ConfigurationException("String_Node_Str" + sTileId);
    }
  }
 else {
    preprintedTileId=-999;
  }
  preprintedTileOrientation=XmlUtils.extractIntegerAttribute(nnp,"String_Node_Str",0);
  currentTile=TileManager.get().getTile(preprintedTileId);
  currentTileRotation=preprintedTileOrientation;
  impassable=XmlUtils.extractStringAttribute(nnp,"String_Node_Str");
  tileCost=XmlUtils.extractIntegerAttribute(nnp,"String_Node_Str",0);
  stations=new ArrayList<Station>();
  for (int i=0; i < currentTile.getStations().size(); i++) {
    Station s=(Station)currentTile.getStations().get(i);
    stations.add(new Station(this,s));
  }
  String valueString=XmlUtils.extractStringAttribute(nnp,"String_Node_Str");
  if (Util.hasValue(valueString)) {
    String[] values=valueString.split("String_Node_Str");
    offBoardValues=new int[values.length];
    for (int i=0; i < values.length; i++) {
      try {
        offBoardValues[i]=Integer.parseInt(values[i]);
      }
 catch (      NumberFormatException e) {
        throw new ConfigurationException("String_Node_Str" + values[i] + "String_Node_Str"+ name,e);
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element)
 */
public void configureFromXML(Element el) throws ConfigurationException {
  NamedNodeMap nnp=el.getAttributes();
  Pattern namePattern=Pattern.compile("String_Node_Str");
  name=XmlUtils.extractStringAttribute(nnp,"String_Node_Str");
  Matcher m=namePattern.matcher(name);
  if (!m.matches()) {
    throw new ConfigurationException("String_Node_Str" + name);
  }
  letter=m.group(1).charAt(0);
  try {
    number=Integer.parseInt(m.group(2));
  }
 catch (  NumberFormatException e) {
  }
  if (lettersGoHorizontal) {
    row=number;
    column=letter - '@';
    if (tileOrientation == MapHex.EW) {
      x=column;
      y=row / 2;
    }
 else {
      x=column;
      y=(row + 1) / 2;
    }
  }
 else {
    row=letter - '@';
    column=number;
    if (tileOrientation == MapHex.EW) {
      x=(column + (letterAHasEvenNumbers ? 1 : 0)) / 2;
      y=row;
    }
 else {
      x=column;
      y=(row + 1) / 2;
    }
  }
  String sTileId=XmlUtils.extractStringAttribute(nnp,"String_Node_Str");
  if (sTileId != null) {
    try {
      preprintedTileId=Integer.parseInt(sTileId);
    }
 catch (    NumberFormatException e) {
      throw new ConfigurationException("String_Node_Str" + sTileId);
    }
  }
 else {
    preprintedTileId=-999;
  }
  currentTileRotation=XmlUtils.extractIntegerAttribute(nnp,"String_Node_Str",0);
  currentTile=TileManager.get().getTile(preprintedTileId);
  impassable=XmlUtils.extractStringAttribute(nnp,"String_Node_Str");
  tileCost=XmlUtils.extractIntegerAttribute(nnp,"String_Node_Str",0);
  stations=new ArrayList<Station>();
  for (int i=0; i < currentTile.getStations().size(); i++) {
    Station s=(Station)currentTile.getStations().get(i);
    stations.add(new Station(this,s));
  }
  String valueString=XmlUtils.extractStringAttribute(nnp,"String_Node_Str");
  if (Util.hasValue(valueString)) {
    String[] values=valueString.split("String_Node_Str");
    offBoardValues=new int[values.length];
    for (int i=0; i < values.length; i++) {
      try {
        offBoardValues[i]=Integer.parseInt(values[i]);
      }
 catch (      NumberFormatException e) {
        throw new ConfigurationException("String_Node_Str" + values[i] + "String_Node_Str"+ name,e);
      }
    }
  }
}