Program: 11437
Project: 11437
Buggy source:
/** 
 * Compute noise LUTs for the given range line.
 * @param y         Index of the given range line.
 * @param x0        X coordinate of the upper left corner pixel of the given tile.
 * @param y0        Y coordinate of the upper left corner pixel of the given tile.
 * @param w         Tile width.
 * @param noiseInfo Object of ThermalNoiseInfo class.
 * @param lut       The noise LUT.
 */
private static void computeTileNoiseLUT(final int y,final int x0,final int y0,final int w,final ThermalNoiseInfo noiseInfo,final double[] lut){
  try {
    final int noiseVecIdx=getNoiseVectorIndex(y0,noiseInfo);
    final Sentinel1Utils.NoiseVector noiseVector0=noiseInfo.noiseVectorList[noiseVecIdx];
    final Sentinel1Utils.NoiseVector noiseVector1=noiseInfo.noiseVectorList[noiseVecIdx + 1];
    final double azTime=noiseInfo.firstLineTime + y * noiseInfo.lineTimeInterval;
    final double azT0=noiseVector0.timeMJD;
    final double azT1=noiseVector1.timeMJD;
    final double muY=(azTime - azT0) / (azT1 - azT0);
    int pixelIdx0=getPixelIndex(x0,noiseVector0);
    int pixelIdx1=getPixelIndex(x0,noiseVector1);
    final int maxLength0=noiseVector0.pixels.length - 2;
    final int maxLength1=noiseVector1.pixels.length - 2;
    final int maxX=x0 + w;
    for (int x=x0; x < maxX; x++) {
      if (x > noiseVector0.pixels[pixelIdx0 + 1] && pixelIdx0 < maxLength0) {
        pixelIdx0++;
      }
      final int x00=noiseVector0.pixels[pixelIdx0];
      final int x01=noiseVector0.pixels[pixelIdx0 + 1];
      final double muX0=(double)(x - x00) / (double)(x01 - x00);
      final double noise0=Maths.interpolationLinear(noiseVector0.noiseLUT[pixelIdx0],noiseVector0.noiseLUT[pixelIdx0 + 1],muX0);
      if (x > noiseVector1.pixels[pixelIdx1 + 1] && pixelIdx1 < maxLength1) {
        pixelIdx1++;
      }
      final int x10=noiseVector1.pixels[pixelIdx1];
      final int x11=noiseVector1.pixels[pixelIdx1 + 1];
      final double muX1=(double)(x - x10) / (double)(x11 - x10);
      final double noise1=Maths.interpolationLinear(noiseVector1.noiseLUT[pixelIdx1],noiseVector1.noiseLUT[pixelIdx1 + 1],muX1);
      lut[x - x0]=Maths.interpolationLinear(noise0,noise1,muY);
    }
  }
 catch (  Throwable e) {
    OperatorUtils.catchOperatorException("String_Node_Str",e);
  }
}

Fixed version (ground truth):
/** 
 * Compute noise LUTs for the given range line.
 * @param y         Index of the given range line.
 * @param x0        X coordinate of the upper left corner pixel of the given tile.
 * @param w         Tile width.
 * @param noiseInfo Object of ThermalNoiseInfo class.
 * @param lut       The noise LUT.
 */
private static void computeTileNoiseLUT(final int y,final int x0,final int w,final ThermalNoiseInfo noiseInfo,final double[] lut){
  try {
    final int noiseVecIdx=getNoiseVectorIndex(y,noiseInfo);
    final Sentinel1Utils.NoiseVector noiseVector0=noiseInfo.noiseVectorList[noiseVecIdx];
    final Sentinel1Utils.NoiseVector noiseVector1=noiseInfo.noiseVectorList[noiseVecIdx + 1];
    final double azTime=noiseInfo.firstLineTime + y * noiseInfo.lineTimeInterval;
    final double azT0=noiseVector0.timeMJD;
    final double azT1=noiseVector1.timeMJD;
    final double muY=(azTime - azT0) / (azT1 - azT0);
    int pixelIdx0=getPixelIndex(x0,noiseVector0);
    int pixelIdx1=getPixelIndex(x0,noiseVector1);
    final int maxLength0=noiseVector0.pixels.length - 2;
    final int maxLength1=noiseVector1.pixels.length - 2;
    final int maxX=x0 + w;
    for (int x=x0; x < maxX; x++) {
      if (x > noiseVector0.pixels[pixelIdx0 + 1] && pixelIdx0 < maxLength0) {
        pixelIdx0++;
      }
      final int x00=noiseVector0.pixels[pixelIdx0];
      final int x01=noiseVector0.pixels[pixelIdx0 + 1];
      final double muX0=(double)(x - x00) / (double)(x01 - x00);
      final double noise0=Maths.interpolationLinear(noiseVector0.noiseLUT[pixelIdx0],noiseVector0.noiseLUT[pixelIdx0 + 1],muX0);
      if (x > noiseVector1.pixels[pixelIdx1 + 1] && pixelIdx1 < maxLength1) {
        pixelIdx1++;
      }
      final int x10=noiseVector1.pixels[pixelIdx1];
      final int x11=noiseVector1.pixels[pixelIdx1 + 1];
      final double muX1=(double)(x - x10) / (double)(x11 - x10);
      final double noise1=Maths.interpolationLinear(noiseVector1.noiseLUT[pixelIdx1],noiseVector1.noiseLUT[pixelIdx1 + 1],muX1);
      lut[x - x0]=Maths.interpolationLinear(noise0,noise1,muY);
    }
  }
 catch (  Throwable e) {
    OperatorUtils.catchOperatorException("String_Node_Str",e);
  }
}