Program: 151176
Project: 151176
Buggy source:
/** 
 * Returns new Backend class instance for specified backendName
 * @param backendName     Class name or alias of backend
 * @param manager         PermissionManager object
 * @param config          Configuration object to access backend settings
 * @param fallBackBackend name of backend that should be used if specified backend was not found or failed to initialize
 * @return new instance of PermissionBackend object
 */
public static PermissionBackend getBackend(String backendName,PermissionManager manager,ConfigurationSection config,String fallBackBackend){
  if (backendName == null || backendName.isEmpty()) {
    backendName=DEFAULT_BACKEND;
  }
  String className=getBackendClassName(backendName);
  try {
    Class<? extends PermissionBackend> backendClass=getBackendClass(backendName);
    manager.getLogger().info("String_Node_Str" + backendName + "String_Node_Str");
    Constructor<? extends PermissionBackend> constructor=backendClass.getConstructor(PermissionManager.class,ConfigurationSection.class);
    return constructor.newInstance(manager,config);
  }
 catch (  ClassNotFoundException e) {
    manager.getLogger().warning("String_Node_Str" + backendName + "String_Node_Str");
    if (fallBackBackend == null) {
      throw new RuntimeException(e);
    }
    if (!className.equals(getBackendClassName(fallBackBackend))) {
      return getBackend(fallBackBackend,manager,config,null);
    }
 else {
      throw new RuntimeException(e);
    }
  }
catch (  Exception e) {
    throw new RuntimeException(e);
  }
}

Fixed version (ground truth):
/** 
 * Returns new Backend class instance for specified backendName
 * @param backendName     Class name or alias of backend
 * @param manager         PermissionManager object
 * @param config          Configuration object to access backend settings
 * @param fallBackBackend name of backend that should be used if specified backend was not found or failed to initialize
 * @return new instance of PermissionBackend object
 */
public static PermissionBackend getBackend(String backendName,PermissionManager manager,ConfigurationSection config,String fallBackBackend) throws PermissionBackendException {
  if (backendName == null || backendName.isEmpty()) {
    backendName=DEFAULT_BACKEND;
  }
  String className=getBackendClassName(backendName);
  try {
    Class<? extends PermissionBackend> backendClass=getBackendClass(backendName);
    manager.getLogger().info("String_Node_Str" + backendName + "String_Node_Str");
    Constructor<? extends PermissionBackend> constructor=backendClass.getConstructor(PermissionManager.class,ConfigurationSection.class);
    return constructor.newInstance(manager,config);
  }
 catch (  ClassNotFoundException e) {
    manager.getLogger().warning("String_Node_Str" + backendName + "String_Node_Str");
    if (fallBackBackend == null) {
      throw new RuntimeException(e);
    }
    if (!className.equals(getBackendClassName(fallBackBackend))) {
      return getBackend(fallBackBackend,manager,config,null);
    }
 else {
      throw new RuntimeException(e);
    }
  }
catch (  Throwable e) {
    if (e instanceof InvocationTargetException) {
      e=e.getCause();
      if (e instanceof PermissionBackendException) {
        throw ((PermissionBackendException)e);
      }
    }
    throw new RuntimeException(e);
  }
}