Program: 76652
Project: 76652
Buggy source:
/** 
 * Set the starting point for an interactive zoom box.
 * @deprecated As of JDK1.1 in java.awt.component but we need to compile under 1.0.2 for netscape3.x compatibility.
 */
public boolean mouseUp(Event evt,int x,int y){
  boolean pointinside=y <= _lry && y >= _uly && x <= _lrx && x >= _ulx;
  boolean handled=false;
  if (_zoomin == true) {
    if (_zoomxn != -1 || _zoomyn != -1) {
      int minx=Math.min(_zoomx,_zoomxn);
      int maxx=Math.max(_zoomx,_zoomxn);
      int miny=Math.min(_zoomy,_zoomyn);
      int maxy=Math.max(_zoomy,_zoomyn);
      graphics.setXORMode(_background);
      graphics.drawRect(minx,miny,maxx - minx,maxy - miny);
      graphics.setPaintMode();
      if (pointinside) {
        double a=_xMin + (_zoomx - _ulx) / _xscale;
        double b=_xMin + (x - _ulx) / _xscale;
        if (a < b)         setXRange(a,b);
 else         setXRange(b,a);
        a=_yMax - (_zoomy - _uly) / _yscale;
        b=_yMax - (y - _uly) / _yscale;
        if (a < b)         setYRange(a,b);
 else         setYRange(b,a);
        drawPlot(true);
      }
      handled=true;
    }
  }
 else   if (_zoomout == true) {
    graphics.setXORMode(_background);
    int x_diff=Math.abs(_zoomx - _zoomxn);
    int y_diff=Math.abs(_zoomy - _zoomyn);
    graphics.drawRect(_zoomx - 15 - x_diff,_zoomy - 15 - y_diff,30 + x_diff * 2,30 + y_diff * 2);
    graphics.setPaintMode();
    if (pointinside) {
      double a=(double)(Math.abs(_zoomx - x)) / 30.0;
      double b=(double)(Math.abs(_zoomy - y)) / 30.0;
      double newx1=_xMax + (_xMax - _xMin) * a;
      double newx2=_xMin - (_xMax - _xMin) * a;
      if (newx1 > _xTop)       newx1=_xTop;
      if (newx2 < _xBottom)       newx2=_xBottom;
      double newy1=_yMax + (_yMax - _yMin) * b;
      double newy2=_yMin - (_yMax - _yMin) * b;
      if (newy1 > _yTop)       newy1=_yTop;
      if (newy2 < _yBottom)       newy2=_yBottom;
      setXRange(newx2,newx1);
      setYRange(newy2,newy1);
      drawPlot(true);
    }
    handled=true;
  }
  _drawn=false;
  _zoomin=_zoomout=false;
  _zoomxn=_zoomyn=_zoomx=_zoomy=-1;
  return handled;
}

Fixed version (ground truth):
/** 
 * Set the starting point for an interactive zoom box.
 * @deprecated As of JDK1.1 in java.awt.component but we need to compile under 1.0.2 for netscape3.x compatibility.
 */
public boolean mouseUp(Event evt,int x,int y){
  boolean pointinside=y <= _lry && y >= _uly && x <= _lrx && x >= _ulx;
  boolean handled=false;
  if ((_zoomin == true) && (_drawn == true)) {
    if (_zoomxn != -1 || _zoomyn != -1) {
      int minx=Math.min(_zoomx,_zoomxn);
      int maxx=Math.max(_zoomx,_zoomxn);
      int miny=Math.min(_zoomy,_zoomyn);
      int maxy=Math.max(_zoomy,_zoomyn);
      graphics.setXORMode(_background);
      graphics.drawRect(minx,miny,maxx - minx,maxy - miny);
      graphics.setPaintMode();
      if ((pointinside) && (Math.abs(_zoomx - x) > 5) && (Math.abs(_zoomy - y) > 5)) {
        double a=_xMin + (_zoomx - _ulx) / _xscale;
        double b=_xMin + (x - _ulx) / _xscale;
        if (a < b)         setXRange(a,b);
 else         setXRange(b,a);
        a=_yMax - (_zoomy - _uly) / _yscale;
        b=_yMax - (y - _uly) / _yscale;
        if (a < b)         setYRange(a,b);
 else         setYRange(b,a);
      }
      drawPlot(true);
      handled=true;
    }
  }
 else   if ((_zoomout == true) && (_drawn == true)) {
    graphics.setXORMode(_background);
    int x_diff=Math.abs(_zoomx - _zoomxn);
    int y_diff=Math.abs(_zoomy - _zoomyn);
    graphics.drawRect(_zoomx - 15 - x_diff,_zoomy - 15 - y_diff,30 + x_diff * 2,30 + y_diff * 2);
    graphics.setPaintMode();
    if (pointinside) {
      double a=(double)(Math.abs(_zoomx - x)) / 30.0;
      double b=(double)(Math.abs(_zoomy - y)) / 30.0;
      double newx1=_xMax + (_xMax - _xMin) * a;
      double newx2=_xMin - (_xMax - _xMin) * a;
      if (newx1 > _xTop)       newx1=_xTop;
      if (newx2 < _xBottom)       newx2=_xBottom;
      double newy1=_yMax + (_yMax - _yMin) * b;
      double newy2=_yMin - (_yMax - _yMin) * b;
      if (newy1 > _yTop)       newy1=_yTop;
      if (newy2 < _yBottom)       newy2=_yBottom;
      setXRange(newx2,newx1);
      setYRange(newy2,newy1);
      drawPlot(true);
    }
    handled=true;
  }
 else   if (_drawn == false) {
    drawPlot(true);
    handled=true;
  }
  _drawn=false;
  _zoomin=_zoomout=false;
  _zoomxn=_zoomyn=_zoomx=_zoomy=-1;
  return handled;
}