Program: 121437
Project: 121437
Buggy source:
private void propagateInput(){
  for (  Connection connection : (List<Connection>)node.getIncomingConnections()) {
    if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
      IODataComponent currentIO=inAndOut.getDataComponent(connection);
      currentIO.setColumnOption(IMetadataColumn.OPTIONS_NONE);
      if (currentIO.hasChanged()) {
        IMetadataTable metadata=inAndOut.getTable(connection);
        INode sourceNode=currentIO.getSource();
        sourceNode.metadataOutputChanged(currentIO,currentIO.getName());
        IMetadataTable newMetadata=metadata.clone();
        currentIO.setTable(newMetadata);
        String schemaType=(String)connection.getSource().getPropertyValue(EParameterName.SCHEMA_TYPE.getName());
        if (schemaType != null) {
          if (schemaType.equals(EmfComponent.REPOSITORY)) {
            connection.getSource().setPropertyValue(EParameterName.SCHEMA_TYPE.getName(),EmfComponent.BUILTIN);
            metadataInputWasRepository.put(connection,Boolean.TRUE);
          }
        }
        List<IMetadataColumn> listColumns=connection.getMetadataTable().getListColumns();
        boolean empty=listColumns.isEmpty();
        List<IMetadataColumn> newListColumns=newMetadata.getListColumns();
        List<ColumnNameChanged> columnNameChangeds=new ArrayList<ColumnNameChanged>();
        int size=listColumns.size();
        int newSize=newListColumns.size();
        if (newSize < size) {
          size=newSize;
        }
        for (int i=0; i < size; i++) {
          IMetadataColumn metadataColumn=listColumns.get(i);
          IMetadataColumn newMetadataColumn=newListColumns.get(i);
          if (metadataColumn != null && newMetadataColumn != null) {
            String oldLabel=metadataColumn.getLabel();
            String newLabel=newMetadataColumn.getLabel();
            if (oldLabel != null && !oldLabel.equals(newLabel)) {
              columnNameChangeds.add(new ColumnNameChanged(oldLabel,newLabel));
            }
          }
        }
        connection.getMetadataTable().setListColumns(newListColumns);
        ColumnListController.updateColumnList(sourceNode,columnNameChangeds,false);
        if (empty) {
          connection.initTraceParamters();
        }
      }
    }
  }
}

Fixed version (ground truth):
private void propagateInput(){
  for (  Connection connection : (List<Connection>)node.getIncomingConnections()) {
    if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
      IODataComponent currentIO=inAndOut.getDataComponent(connection);
      currentIO.setColumnOption(IMetadataColumn.OPTIONS_NONE);
      if (currentIO.hasChanged()) {
        IMetadataTable metadata=inAndOut.getTable(connection);
        INode sourceNode=currentIO.getSource();
        sourceNode.metadataOutputChanged(currentIO,currentIO.getName());
        IMetadataTable newMetadata=metadata.clone();
        currentIO.setTable(newMetadata);
        String schemaType=(String)connection.getSource().getPropertyValue(EParameterName.SCHEMA_TYPE.getName());
        if (schemaType != null) {
          if (schemaType.equals(EmfComponent.REPOSITORY)) {
            connection.getSource().setPropertyValue(EParameterName.SCHEMA_TYPE.getName(),EmfComponent.BUILTIN);
            metadataInputWasRepository.put(connection,Boolean.TRUE);
          }
        }
        List<IMetadataColumn> listColumns=connection.getMetadataTable().getListColumns();
        boolean empty=listColumns.isEmpty();
        List<IMetadataColumn> newListColumns=newMetadata.getListColumns();
        List<ColumnNameChanged> columnNameChangeds=new ArrayList<ColumnNameChanged>();
        int size=listColumns.size();
        int newSize=newListColumns.size();
        if (newSize < size) {
          size=newSize;
        }
        for (int i=0; i < size; i++) {
          IMetadataColumn metadataColumn=listColumns.get(i);
          IMetadataColumn newMetadataColumn=newListColumns.get(i);
          if (metadataColumn != null && newMetadataColumn != null) {
            String oldLabel=metadataColumn.getLabel();
            String newLabel=newMetadataColumn.getLabel();
            if (oldLabel != null && !oldLabel.equals(newLabel)) {
              columnNameChangeds.add(new ColumnNameChanged(oldLabel,newLabel));
            }
          }
        }
        connection.getMetadataTable().setListColumns(newListColumns);
        if (connection.getConnectorName() != null && connection.getConnectorName().equals("String_Node_Str")) {
          IMetadataTable table=sourceNode.getMetadataFromConnector(EConnectionType.FLOW_MAIN.getName());
          if (table != null) {
            table.setListColumns(newListColumns);
          }
        }
        ColumnListController.updateColumnList(sourceNode,columnNameChangeds,false);
        if (empty) {
          connection.initTraceParamters();
        }
      }
    }
  }
}