Program: 107892
Project: 107892
Buggy source:
/** 
 * Data type changed
 */
private void actionDataTypeChanged(String label){
  if (label != null) {
    if ((model != null) && (model.getInputConfig().getInput() != null)) {
      String attribute=model.getSelectedAttribute();
      DataTypeDescription<?> description=getDataTypeDescription(label);
      DataType<?> type;
      if (description.getLabel().equals("String_Node_Str")) {
        final String text1=Resources.getMessage("String_Node_Str");
        final String text2=Resources.getMessage("String_Node_Str");
        String[] array=controller.actionShowOrderValuesDialog(controller.getResources().getShell(),text1,text2,DataType.STRING,model.getLocale(),getValuesAsArray(attribute));
        if (array == null) {
          type=DataType.STRING;
        }
 else {
          try {
            type=DataType.createOrderedString(array);
            if (!isValidDataType(type,getValuesAsList(attribute))) {
              type=DataType.STRING;
            }
          }
 catch (          Exception e) {
            controller.actionShowInfoDialog(controller.getResources().getShell(),Resources.getMessage("String_Node_Str"),Resources.getMessage("String_Node_Str") + e.getMessage());
            type=DataType.STRING;
          }
        }
      }
 else       if (description.hasFormat()) {
        final String text1=Resources.getMessage("String_Node_Str");
        final String text2=Resources.getMessage("String_Node_Str");
        final String format=controller.actionShowFormatInputDialog(controller.getResources().getShell(),text1,text2,model.getLocale(),description,getValuesAsList(attribute));
        if (format == null) {
          type=DataType.STRING;
        }
 else {
          type=description.newInstance(format,model.getLocale());
        }
      }
 else {
        type=description.newInstance();
        if (!isValidDataType(type,getValuesAsList(attribute))) {
          type=DataType.STRING;
        }
      }
      this.model.getInputDefinition().setDataType(attribute,type);
      this.updateDataTypes();
      this.controller.update(new ModelEvent(this,ModelPart.DATA_TYPE,attribute));
    }
  }
}

Fixed version (ground truth):
/** 
 * Data type changed
 */
private void actionDataTypeChanged(String label){
  if (label != null && model != null && model.getInputConfig().getInput() != null) {
    String attribute=model.getSelectedAttribute();
    DataTypeDescription<?> description=getDataTypeDescription(label);
    DataType<?> type=model.getInputDefinition().getDataType(attribute);
    boolean changed=false;
    try {
      if (description.getLabel().equals("String_Node_Str")) {
        final String text1=Resources.getMessage("String_Node_Str");
        final String text2=Resources.getMessage("String_Node_Str");
        String[] array=controller.actionShowOrderValuesDialog(controller.getResources().getShell(),text1,text2,DataType.STRING,model.getLocale(),getValuesAsArray(attribute));
        if (array != null) {
          DataType<?> tempType=DataType.createOrderedString(array);
          if (isValidDataType(tempType,getValuesAsList(attribute))) {
            type=tempType;
            changed=true;
          }
        }
      }
 else       if (description.hasFormat()) {
        final String text1=Resources.getMessage("String_Node_Str");
        final String text2=Resources.getMessage("String_Node_Str");
        final String format=controller.actionShowFormatInputDialog(controller.getResources().getShell(),text1,text2,model.getLocale(),description,getValuesAsList(attribute));
        if (format != null) {
          type=description.newInstance(format,model.getLocale());
          changed=true;
        }
      }
 else {
        DataType<?> typeTemp=description.newInstance();
        if (isValidDataType(typeTemp,getValuesAsList(attribute))) {
          type=typeTemp;
          changed=true;
        }
      }
    }
 catch (    Exception e) {
      controller.actionShowInfoDialog(controller.getResources().getShell(),Resources.getMessage("String_Node_Str"),Resources.getMessage("String_Node_Str") + e.getMessage());
      type=DataType.STRING;
      changed=true;
    }
    if (changed) {
      this.model.getInputDefinition().setDataType(attribute,type);
      this.updateDataTypes();
      this.controller.update(new ModelEvent(this,ModelPart.DATA_TYPE,attribute));
    }
  }
}