Program: 79837
Project: 79837
Buggy source:
/** 
 * Handles both initial and subsequent RESTful calls from clients submitting Callbacks for the authentication process to continue. This is determined by checking if the POST body is empty or not. If it is empty then this is initiating the authentication process otherwise it is a subsequent call submitting Callbacks. Initiating authentication request using the query parameters from the URL starts the login process and either returns an SSOToken on successful authentication or a number of Callbacks needing to be completed before authentication can proceed or an exception if any problems occurred whilst trying to authenticate. Using the body of the POST request the method continues the login process, submitting the given Callbacks and then either returns an SSOToken on successful authentication or a number of additional Callbacks needing to be completed before authentication can proceed or an exception if any problems occurred whilst trying to authenticate.
 * @param entity The Json Representation of the post body of the request.
 * @return A Json Representation of the response body. The response will contain either a JSON object containing theSSOToken id from a successful authentication, a JSON object containing a number of Callbacks for the client to complete and return or a JSON object containing an exception message.
 * @throws ResourceException If there is an error processing the authentication request.
 */
@Post public Representation authenticate(JsonRepresentation entity) throws ResourceException {
  if (entity != null && !MediaType.APPLICATION_JSON.equals(entity.getMediaType())) {
    throw new ResourceException(Status.CLIENT_ERROR_UNSUPPORTED_MEDIA_TYPE,"String_Node_Str");
  }
  final HttpServletRequest request=getHttpServletRequest();
  final HttpServletResponse response=ServletUtils.getResponse(getResponse());
  final Map<String,String> queryString=getReference().getQueryAsForm().getValuesMap();
  final String sessionUpgradeSSOTokenId=queryString.get("String_Node_Str");
  try {
    JsonValue jsonContent=getJsonContent(entity);
    JsonValue jsonResponse;
    if (jsonContent != null && jsonContent.size() > 0) {
      jsonResponse=restAuthenticationHandler.continueAuthentication(request,response,jsonContent,sessionUpgradeSSOTokenId);
    }
 else {
      final String authIndexType=queryString.get("String_Node_Str");
      final String authIndexValue=queryString.get("String_Node_Str");
      jsonResponse=restAuthenticationHandler.initiateAuthentication(request,response,authIndexType,authIndexValue,sessionUpgradeSSOTokenId);
    }
    return createResponse(jsonResponse);
  }
 catch (  RestAuthResponseException e) {
    DEBUG.message("String_Node_Str",e);
    return handleCallbackException(e);
  }
catch (  RestAuthException e) {
    DEBUG.error("String_Node_Str",e);
    throw new ResourceException(org.forgerock.json.resource.ResourceException.getException(401,e.getMessage()).setDetail(json(object(field("String_Node_Str",e.getFailureUrl())))));
  }
catch (  Exception e) {
    DEBUG.error("String_Node_Str",e);
    throw new ResourceException(org.forgerock.json.resource.ResourceException.INTERNAL_ERROR,e);
  }
}

Fixed version (ground truth):
/** 
 * Handles both initial and subsequent RESTful calls from clients submitting Callbacks for the authentication process to continue. This is determined by checking if the POST body is empty or not. If it is empty then this is initiating the authentication process otherwise it is a subsequent call submitting Callbacks. Initiating authentication request using the query parameters from the URL starts the login process and either returns an SSOToken on successful authentication or a number of Callbacks needing to be completed before authentication can proceed or an exception if any problems occurred whilst trying to authenticate. Using the body of the POST request the method continues the login process, submitting the given Callbacks and then either returns an SSOToken on successful authentication or a number of additional Callbacks needing to be completed before authentication can proceed or an exception if any problems occurred whilst trying to authenticate.
 * @param entity The Json Representation of the post body of the request.
 * @return A Json Representation of the response body. The response will contain either a JSON object containing theSSOToken id from a successful authentication, a JSON object containing a number of Callbacks for the client to complete and return or a JSON object containing an exception message.
 * @throws ResourceException If there is an error processing the authentication request.
 */
@Post public Representation authenticate(JsonRepresentation entity) throws ResourceException {
  if (entity != null && !MediaType.APPLICATION_JSON.equals(entity.getMediaType())) {
    throw new ResourceException(Status.CLIENT_ERROR_UNSUPPORTED_MEDIA_TYPE,"String_Node_Str");
  }
  final HttpServletRequest request=getHttpServletRequest();
  final HttpServletResponse response=ServletUtils.getResponse(getResponse());
  final Map<String,String> queryString=getReference().getQueryAsForm().getValuesMap();
  final String sessionUpgradeSSOTokenId=queryString.get("String_Node_Str");
  try {
    JsonValue jsonContent=getJsonContent(entity);
    JsonValue jsonResponse;
    if (jsonContent != null && jsonContent.size() > 0) {
      jsonResponse=restAuthenticationHandler.continueAuthentication(request,response,jsonContent,sessionUpgradeSSOTokenId);
    }
 else {
      final String authIndexType=queryString.get("String_Node_Str");
      final String authIndexValue=queryString.get("String_Node_Str");
      jsonResponse=restAuthenticationHandler.initiateAuthentication(request,response,authIndexType,authIndexValue,sessionUpgradeSSOTokenId);
    }
    return createResponse(jsonResponse);
  }
 catch (  RestAuthResponseException e) {
    DEBUG.message("String_Node_Str",e);
    return handleCallbackException(e);
  }
catch (  RestAuthException e) {
    DEBUG.error("String_Node_Str",e);
    org.forgerock.json.resource.ResourceException cause=org.forgerock.json.resource.ResourceException.getException(401,e.getMessage());
    if (e.getFailureUrl() != null) {
      cause.setDetail(json(object(field("String_Node_Str",e.getFailureUrl()))));
    }
    throw new ResourceException(401,cause);
  }
catch (  Exception e) {
    DEBUG.error("String_Node_Str",e);
    throw new ResourceException(org.forgerock.json.resource.ResourceException.INTERNAL_ERROR,e);
  }
}