Program: 89020
Project: 89020
Buggy source:
public Action parse(ConfigurationSection input,String key) throws ParsingException {
  if (input == null)   throw ParsingException.fromFormat("String_Node_Str");
  Action result=new Action();
  String defaultName=provider.getDefaultName();
  String text=null;
  List<String> channels=null;
  if (provider.containsService(defaultName)) {
    ResourcesParser parser=provider.getDefaultService().getResourcesParser(namedParameters);
    if (parser != null) {
      ResourceFactory factory=parser.parse(input,key,null);
      if (factory != null) {
        result.addReward(defaultName,factory);
        result.setId(currentID++);
        return result;
      }
    }
  }
  ConfigurationSection values=input.getConfigurationSection(key);
  if (values == null)   return null;
  for (  String sub : values.getKeys(false)) {
    String enumed=Utility.getEnumName(sub);
    if (sub.equalsIgnoreCase(messageTextSetting)) {
      text=values.getString(sub);
    }
 else     if (sub.equalsIgnoreCase(messageChannelSetting)) {
      channels=listParser.parseSafe(values,sub);
    }
 else     if (provider.containsService(enumed)) {
      ResourcesParser parser=provider.getByName(enumed).getResourcesParser(namedParameters);
      if (parser != null) {
        ResourceFactory factory=parser.parse(values,sub);
        if (factory != null)         result.addReward(sub,factory);
      }
 else {
        throw ParsingException.fromFormat("String_Node_Str",sub);
      }
    }
 else {
      throw ParsingException.fromFormat("String_Node_Str",sub);
    }
  }
  if (text != null) {
    Message message=new Message();
    message.setText(text);
    message.setChannels(channels);
    result.setMessage(message);
  }
  result.setId(currentID++);
  return result;
}

Fixed version (ground truth):
public Action parse(ConfigurationSection input,String key) throws ParsingException {
  if (input == null)   throw ParsingException.fromFormat("String_Node_Str");
  Action result=new Action();
  String defaultName=provider.getDefaultName();
  String text=null;
  List<String> channels=null;
  if (provider.containsService(defaultName)) {
    ResourcesParser parser=provider.getDefaultService().getResourcesParser(namedParameters);
    if (parser != null) {
      try {
        ResourceFactory factory=parser.parse(input,key);
        if (factory != null) {
          result.addReward(defaultName,factory);
          result.setId(currentID++);
          return result;
        }
      }
 catch (      ParsingException e) {
        if (!input.isConfigurationSection(key)) {
          throw e;
        }
      }
    }
  }
  ConfigurationSection values=input.getConfigurationSection(key);
  if (values == null) {
    return null;
  }
  for (  String sub : values.getKeys(false)) {
    String enumed=Utility.getEnumName(sub);
    if (sub.equalsIgnoreCase(messageTextSetting)) {
      text=values.getString(sub);
    }
 else     if (sub.equalsIgnoreCase(messageChannelSetting)) {
      channels=listParser.parseSafe(values,sub);
    }
 else     if (provider.containsService(enumed)) {
      ResourcesParser parser=provider.getByName(enumed).getResourcesParser(namedParameters);
      if (parser != null) {
        ResourceFactory factory=parser.parse(values,sub);
        if (factory != null)         result.addReward(sub,factory);
      }
 else {
        throw ParsingException.fromFormat("String_Node_Str",sub);
      }
    }
 else {
      throw ParsingException.fromFormat("String_Node_Str",sub);
    }
  }
  if (text != null) {
    Message message=new Message();
    message.setText(text);
    message.setChannels(channels);
    result.setMessage(message);
  }
  result.setId(currentID++);
  return result;
}