Program: 93735
Project: 93735
Buggy source:
protected void drawLine(GC buffer,Item leftItem,Item rightItem,DiffElement diff){
  if (leftItem == null || rightItem == null)   return;
  final Rectangle centerbounds=getCenterPart().getBounds();
  Rectangle leftBounds=null;
  Rectangle rightBounds=null;
  if (selectedTab == TREE_TAB) {
    leftBounds=((TreeItem)leftItem).getBounds();
    rightBounds=((TreeItem)rightItem).getBounds();
  }
 else   if (selectedTab == PROPERTIES_TAB) {
    leftBounds=((TableItem)leftItem).getBounds();
    rightBounds=((TableItem)rightItem).getBounds();
  }
 else {
    throw new IllegalStateException("String_Node_Str");
  }
  final IPreferenceStore comparePreferences=EMFCompareUIPlugin.getDefault().getPreferenceStore();
  RGB color=PreferenceConverter.getColor(comparePreferences,EMFCompareConstants.PREFERENCES_KEY_CHANGED_COLOR);
  if (diff instanceof AddModelElement) {
    color=PreferenceConverter.getColor(comparePreferences,EMFCompareConstants.PREFERENCES_KEY_ADDED_COLOR);
  }
 else   if (diff instanceof RemoveModelElement) {
    color=PreferenceConverter.getColor(comparePreferences,EMFCompareConstants.PREFERENCES_KEY_REMOVED_COLOR);
  }
  final int treeTabBorder=5;
  final int leftX=0;
  final int rightX=centerbounds.width;
  final int leftRectangleHeight=leftBounds.height - 1;
  final int rightRectangleHeight=rightBounds.height - 1;
  int leftY=leftBounds.y + leftRectangleHeight / 2 + treeTabBorder;
  int rightY=rightBounds.y + rightRectangleHeight / 2 + treeTabBorder;
  if (selectedTab == TREE_TAB && (!leftItem.getData().equals(EMFCompareEObjectUtils.getLeftElement(diff)) || diff instanceof AddModelElement)) {
    leftY=leftBounds.y + leftRectangleHeight + treeTabBorder;
  }
  if (selectedTab == TREE_TAB && (!rightItem.getData().equals(EMFCompareEObjectUtils.getRightElement(diff)) || diff instanceof RemoveModelElement)) {
    rightY=rightBounds.y + rightRectangleHeight + treeTabBorder;
  }
  int lineWidth=1;
  if (selectedTab == PROPERTIES_TAB || leftPart.getSelectedElements().contains(leftItem) || rightPart.getSelectedElements().contains(rightItem)) {
    lineWidth=2;
  }
  buffer.setForeground(new Color(getCenterPart().getDisplay(),color));
  buffer.setLineWidth(lineWidth);
  buffer.setLineStyle(SWT.LINE_SOLID);
  final int[] points=getCenterCurvePoints(leftX,leftY,rightX,rightY);
  for (int i=1; i < points.length; i++) {
    buffer.drawLine(leftX + i - 1,points[i - 1],leftX + i,points[i]);
  }
}

Fixed version (ground truth):
protected void drawLine(GC gc,Item leftItem,Item rightItem,DiffElement diff){
  if (leftItem == null || rightItem == null)   return;
  final Rectangle centerbounds=getCenterPart().getBounds();
  Rectangle leftBounds=null;
  Rectangle rightBounds=null;
  if (selectedTab == TREE_TAB) {
    leftBounds=((TreeItem)leftItem).getBounds();
    rightBounds=((TreeItem)rightItem).getBounds();
  }
 else   if (selectedTab == PROPERTIES_TAB) {
    leftBounds=((TableItem)leftItem).getBounds();
    rightBounds=((TableItem)rightItem).getBounds();
  }
 else {
    throw new IllegalStateException("String_Node_Str");
  }
  RGB color=changedColor;
  if (diff instanceof AddModelElement) {
    color=addedColor;
  }
 else   if (diff instanceof RemoveModelElement) {
    color=removedColor;
  }
  final int treeTabBorder=5;
  final int leftX=0;
  final int rightX=centerbounds.width;
  final int leftRectangleHeight=leftBounds.height - 1;
  final int rightRectangleHeight=rightBounds.height - 1;
  int leftY=leftBounds.y + leftRectangleHeight / 2 + treeTabBorder;
  int rightY=rightBounds.y + rightRectangleHeight / 2 + treeTabBorder;
  if (selectedTab == TREE_TAB && (!leftItem.getData().equals(EMFCompareEObjectUtils.getLeftElement(diff)) || diff instanceof AddModelElement)) {
    leftY=leftBounds.y + leftRectangleHeight + treeTabBorder;
  }
  if (selectedTab == TREE_TAB && (!rightItem.getData().equals(EMFCompareEObjectUtils.getRightElement(diff)) || diff instanceof RemoveModelElement)) {
    rightY=rightBounds.y + rightRectangleHeight + treeTabBorder;
  }
  int lineWidth=1;
  if (selectedTab == PROPERTIES_TAB || leftPart.getSelectedElements().contains(leftItem) || rightPart.getSelectedElements().contains(rightItem)) {
    lineWidth=2;
  }
  gc.setForeground(new Color(getCenterPart().getDisplay(),color));
  gc.setLineWidth(lineWidth);
  gc.setLineStyle(SWT.LINE_SOLID);
  final int[] points=getCenterCurvePoints(leftX,leftY,rightX,rightY);
  for (int i=1; i < points.length; i++) {
    gc.drawLine(leftX + i - 1,points[i - 1],leftX + i,points[i]);
  }
}