Program: 56901
Project: 56901
Buggy source:
/** 
 * This method is used by RadioButtons and SelectOneMenus to limit the list of legal values. If another value is sent, the input field is considered empty. This comes in useful the the back-end attribute is a primitive type like int, which doesn't support null values.
 * @param context
 * @param component
 * @param legalValues an optional list of legal values. May be null.
 * @param The real attribute name of the request parameter. By default, BootsFaces guesses the attribute namefrom the client ID or the name attribute of the input field. However, in some cases such as radio buttons, this detection fails.
 */
public void decode(FacesContext context,UIComponent component,List<String> legalValues,String realEventSourceName){
  InputText inputText=(InputText)component;
  if (inputText.isDisabled() || inputText.isReadonly()) {
    return;
  }
  decodeBehaviors(context,inputText);
  String clientId=inputText.getClientId(context);
  String name=inputText.getName();
  if (realEventSourceName == null) {
    realEventSourceName="String_Node_Str" + clientId;
  }
  if (null == name) {
    name="String_Node_Str" + clientId;
  }
  String submittedValue=(String)context.getExternalContext().getRequestParameterMap().get(name);
  if (null != legalValues && null != submittedValue) {
    boolean found=false;
    for (    String option : legalValues) {
      found|=submittedValue.equals(option);
    }
    if (!found) {
      submittedValue="String_Node_Str";
    }
  }
  if (submittedValue != null) {
    inputText.setSubmittedValue(submittedValue);
  }
  new AJAXRenderer().decode(context,component,realEventSourceName);
}

Fixed version (ground truth):
/** 
 * This method is used by RadioButtons and SelectOneMenus to limit the list of legal values. If another value is sent, the input field is considered empty. This comes in useful the the back-end attribute is a primitive type like int, which doesn't support null values.
 * @param context
 * @param component
 * @param legalValues an optional list of legal values. May be null.
 * @param realEventSourceName The real attribute name of the request parameter. By default, BootsFaces guesses the attribute namefrom the client ID or the name attribute of the input field. However, in some cases such as radio buttons, this detection fails.
 */
public void decode(FacesContext context,UIComponent component,List<String> legalValues,String realEventSourceName){
  InputText inputText=(InputText)component;
  if (inputText.isDisabled() || inputText.isReadonly()) {
    return;
  }
  decodeBehaviors(context,inputText);
  String clientId=inputText.getClientId(context);
  String name=inputText.getName();
  if (realEventSourceName == null) {
    realEventSourceName="String_Node_Str" + clientId;
  }
  if (null == name) {
    name="String_Node_Str" + clientId;
  }
  String submittedValue=(String)context.getExternalContext().getRequestParameterMap().get(name);
  if (null != legalValues && null != submittedValue) {
    boolean found=false;
    for (    String option : legalValues) {
      found|=submittedValue.equals(option);
    }
    if (!found) {
      submittedValue="String_Node_Str";
    }
  }
  if (submittedValue != null) {
    inputText.setSubmittedValue(submittedValue);
  }
  new AJAXRenderer().decode(context,component,realEventSourceName);
}