Program: 143421
Project: 143421
Buggy source:
@Override public void dataProviderOrRecordChanged(IRecordInternal record,String dataProvider,boolean isFormDP,boolean isGlobalDP,boolean fireChangeEvent){
  if (typeOfDP == null) {
    typeOfDP=NGUtils.getDataProviderPropertyDescription(dataProviderID,servoyDataConverterContext.getApplication().getFlattenedSolution(),servoyDataConverterContext.getForm().getForm(),record != null ? record.getParentFoundSet().getTable() : null,getDataProviderConfig().hasParseHtml());
  }
  String dpID=dataProviderID;
  IDataProviderLookup dpLookup=servoyDataConverterContext.getApplication().getFlattenedSolution().getDataproviderLookup(servoyDataConverterContext.getApplication().getFoundSetManager(),servoyDataConverterContext.getForm().getForm());
  if (dpLookup != null) {
    IDataProvider dp;
    try {
      dp=dpLookup.getDataProvider(dataProviderID);
      if (dp != null) {
        dpID=dp.getDataProviderID();
      }
    }
 catch (    RepositoryException e) {
      Debug.error(e);
    }
  }
  Object v=com.servoy.j2db.dataprocessing.DataAdapterList.getValueObject(record,servoyDataConverterContext.getForm().getFormScope(),dpID);
  if (v == Scriptable.NOT_FOUND)   v=null;
  v=replaceTagsIfNeeded(v);
  if (v instanceof UUID)   v=v.toString();
  boolean changed=((v != value) && (v == null || !v.equals(value)));
  value=v;
  if (changed) {
    jsonValue=null;
  }
  if (fireChangeEvent && changed) {
    changeMonitor.valueChanged();
  }
}

Fixed version (ground truth):
@Override public void dataProviderOrRecordChanged(IRecordInternal record,String dataProvider,boolean isFormDP,boolean isGlobalDP,boolean fireChangeEvent){
  if (typeOfDP == null) {
    Collection<PropertyDescription> properties=formElement.getWebComponentSpec().getProperties(TypesRegistry.getType("String_Node_Str"));
    for (    PropertyDescription formatPd : properties) {
      Object formatConfig=formatPd.getConfig();
      if (formatConfig instanceof String[] && Arrays.asList((String[])formatConfig).indexOf(dpPD.getName()) != -1) {
        INGApplication application=servoyDataConverterContext.getApplication();
        String format=(String)formElement.getPropertyValue(formatPd.getName());
        fieldFormat=ComponentFormat.getComponentFormat(format,dataProviderID,application.getFlattenedSolution().getDataproviderLookup(application.getFoundSetManager(),formElement.getForm()),application);
        break;
      }
    }
    if (fieldFormat != null) {
      typeOfDP=NGUtils.getDataProviderPropertyDescription(fieldFormat.uiType,getDataProviderConfig().hasParseHtml());
    }
 else {
      typeOfDP=NGUtils.getDataProviderPropertyDescription(dataProviderID,servoyDataConverterContext.getApplication().getFlattenedSolution(),servoyDataConverterContext.getForm().getForm(),record != null ? record.getParentFoundSet().getTable() : null,getDataProviderConfig().hasParseHtml());
    }
  }
  String dpID=dataProviderID;
  IDataProviderLookup dpLookup=servoyDataConverterContext.getApplication().getFlattenedSolution().getDataproviderLookup(servoyDataConverterContext.getApplication().getFoundSetManager(),servoyDataConverterContext.getForm().getForm());
  if (dpLookup != null) {
    IDataProvider dp;
    try {
      dp=dpLookup.getDataProvider(dataProviderID);
      if (dp != null) {
        dpID=dp.getDataProviderID();
      }
    }
 catch (    RepositoryException e) {
      Debug.error(e);
    }
  }
  Object v=com.servoy.j2db.dataprocessing.DataAdapterList.getValueObject(record,servoyDataConverterContext.getForm().getFormScope(),dpID);
  if (v == Scriptable.NOT_FOUND)   v=null;
  if (fieldFormat != null && !findMode) {
    v=ComponentFormat.applyUIConverterToObject(v,dataProviderID,servoyDataConverterContext.getApplication().getFoundSetManager(),fieldFormat);
  }
  v=replaceTagsIfNeeded(v);
  if (v instanceof UUID)   v=v.toString();
  boolean changed=((v != value) && (v == null || !v.equals(value)));
  value=v;
  if (changed) {
    jsonValue=null;
  }
  if (fireChangeEvent && changed) {
    changeMonitor.valueChanged();
  }
}