Program: 11044
Project: 11044
Buggy source:
public synchronized SegmentGeometry getGeometry(DrawContext dc,CurtainTile tile,double top,double bottom,int subsegments,boolean followTerrain){
  MemoryCache cache=WorldWind.getMemoryCache(CACHE_ID);
  TileKey tileKey=tile.getTileKey();
  SegmentGeometry geometry=(SegmentGeometry)cache.getObject(tileKey);
  if (geometry != null && geometry.getTime() >= System.currentTimeMillis() - this.getUpdateFrequency()) {
    return geometry;
  }
  Segment segment=tile.getSegment();
  NavigableMap<Double,LatLon> betweenMap=segmentMap(segment,subsegments);
  int numVertices=betweenMap.size() * 2;
  Globe globe=dc.getGlobe();
  FloatBuffer verts, texCoords;
  if (geometry != null) {
    verts=geometry.getVertices();
    texCoords=geometry.getTexCoords();
  }
 else   if (dc.getGLRuntimeCapabilities().isUseVertexBufferObject()) {
    verts=FloatBuffer.allocate(numVertices * 3);
    texCoords=FloatBuffer.allocate(numVertices * 2);
  }
 else {
    verts=BufferUtil.newFloatBuffer(numVertices * 3);
    texCoords=BufferUtil.newFloatBuffer(numVertices * 2);
  }
  Vec4 refCenter=getSegmentCenterPoint(dc,segment,top,bottom,followTerrain);
  top=VerticalExaggerationAccessor.applyVerticalExaggeration(dc,top);
  bottom=VerticalExaggerationAccessor.applyVerticalExaggeration(dc,bottom);
  double height=top - bottom;
  double t=top - segment.getTop() * height;
  double b=top - segment.getBottom() * height;
  if (t <= b) {
    t=b + 1;
  }
  double percentDistance=segment.getHorizontalDelta();
  for (  Entry<Double,LatLon> entry : betweenMap.entrySet()) {
    LatLon ll=entry.getValue();
    double e=0;
    if (followTerrain) {
      e=globe.getElevation(ll.latitude,ll.longitude) * VerticalExaggerationAccessor.getGlobalVerticalExaggeration(dc);
    }
    Vec4 point1=globe.computePointFromPosition(ll,t + e);
    Vec4 point2=globe.computePointFromPosition(ll,b + e);
    double percent=(entry.getKey() - segment.getStart()) / percentDistance;
    verts.put((float)(point1.x - refCenter.x)).put((float)(point1.y - refCenter.y)).put((float)(point1.z - refCenter.z));
    verts.put((float)(point2.x - refCenter.x)).put((float)(point2.y - refCenter.y)).put((float)(point2.z - refCenter.z));
    texCoords.put((float)percent).put(1f);
    texCoords.put((float)percent).put(0f);
  }
  if (geometry == null) {
    geometry=new SegmentGeometry(dc,verts,texCoords,refCenter);
    cache.add(tileKey,geometry,geometry.getSizeInBytes());
  }
 else {
    geometry.update(dc);
  }
  return geometry;
}

Fixed version (ground truth):
public synchronized SegmentGeometry getGeometry(DrawContext dc,CurtainTile tile,double top,double bottom,int subsegments,boolean followTerrain){
  boolean exaggerationChanged=VerticalExaggerationAccessor.checkAndMarkVerticalExaggeration(this,dc);
  if (exaggerationChanged) {
    exaggerationChangeTime=System.currentTimeMillis();
  }
  MemoryCache cache=WorldWind.getMemoryCache(CACHE_ID);
  TileKey tileKey=tile.getTileKey();
  SegmentGeometry geometry=(SegmentGeometry)cache.getObject(tileKey);
  if (geometry != null && geometry.getTime() >= System.currentTimeMillis() - this.getUpdateFrequency() && geometry.getTime() >= exaggerationChangeTime) {
    return geometry;
  }
  Segment segment=tile.getSegment();
  NavigableMap<Double,LatLon> betweenMap=segmentMap(segment,subsegments);
  int numVertices=betweenMap.size() * 2;
  Globe globe=dc.getGlobe();
  FloatBuffer verts, texCoords;
  if (geometry != null) {
    verts=geometry.getVertices();
    texCoords=geometry.getTexCoords();
  }
 else   if (dc.getGLRuntimeCapabilities().isUseVertexBufferObject()) {
    verts=FloatBuffer.allocate(numVertices * 3);
    texCoords=FloatBuffer.allocate(numVertices * 2);
  }
 else {
    verts=BufferUtil.newFloatBuffer(numVertices * 3);
    texCoords=BufferUtil.newFloatBuffer(numVertices * 2);
  }
  Vec4 refCenter=getSegmentCenterPoint(dc,segment,top,bottom,followTerrain);
  top=VerticalExaggerationAccessor.applyVerticalExaggeration(dc,top);
  bottom=VerticalExaggerationAccessor.applyVerticalExaggeration(dc,bottom);
  double height=top - bottom;
  double t=top - segment.getTop() * height;
  double b=top - segment.getBottom() * height;
  if (t <= b) {
    t=b + 1;
  }
  double percentDistance=segment.getHorizontalDelta();
  for (  Entry<Double,LatLon> entry : betweenMap.entrySet()) {
    LatLon ll=entry.getValue();
    double e=0;
    if (followTerrain) {
      e=globe.getElevation(ll.latitude,ll.longitude) * VerticalExaggerationAccessor.getGlobalVerticalExaggeration(dc);
    }
    Vec4 point1=globe.computePointFromPosition(ll,t + e);
    Vec4 point2=globe.computePointFromPosition(ll,b + e);
    double percent=(entry.getKey() - segment.getStart()) / percentDistance;
    verts.put((float)(point1.x - refCenter.x)).put((float)(point1.y - refCenter.y)).put((float)(point1.z - refCenter.z));
    verts.put((float)(point2.x - refCenter.x)).put((float)(point2.y - refCenter.y)).put((float)(point2.z - refCenter.z));
    texCoords.put((float)percent).put(1f);
    texCoords.put((float)percent).put(0f);
  }
  if (geometry == null) {
    geometry=new SegmentGeometry(dc,verts,texCoords,refCenter);
    cache.add(tileKey,geometry,geometry.getSizeInBytes());
  }
 else {
    geometry.update(dc,refCenter);
  }
  return geometry;
}