Program: 194414
Project: 194414
Buggy source:
/** 
 * <p> Copy source image data to destination Image. </p> <p> Only support the copy between two non-  {@link ImageFormat#PRIVATE PRIVATE} formatimages with same properties (format, size, etc.). The data from the source image will be copied to the byteBuffers from the destination Image starting from position zero, and the destination image will be rewound to zero after copy is done. </p>
 * @param src The source image to be copied from.
 * @param dst The destination image to be copied to.
 * @throws IllegalArgumentException If the source and destination imageshave different format, or one of the images is not copyable.
 */
public static void imageCopy(Image src,Image dst){
  if (src == null || dst == null) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (src.getFormat() != dst.getFormat()) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (src.getFormat() == ImageFormat.PRIVATE || dst.getFormat() == ImageFormat.PRIVATE) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (!(dst.getOwner() instanceof ImageWriter)) {
    throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
  }
  Size srcSize=new Size(src.getWidth(),src.getHeight());
  Size dstSize=new Size(dst.getWidth(),dst.getHeight());
  if (!srcSize.equals(dstSize)) {
    throw new IllegalArgumentException("String_Node_Str" + srcSize + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ dstSize);
  }
  Plane[] srcPlanes=src.getPlanes();
  Plane[] dstPlanes=dst.getPlanes();
  ByteBuffer srcBuffer=null;
  ByteBuffer dstBuffer=null;
  for (int i=0; i < srcPlanes.length; i++) {
    srcBuffer=srcPlanes[i].getBuffer();
    int srcPos=srcBuffer.position();
    srcBuffer.rewind();
    dstBuffer=dstPlanes[i].getBuffer();
    dstBuffer.rewind();
    dstBuffer.put(srcBuffer);
    srcBuffer.position(srcPos);
    dstBuffer.rewind();
  }
}

Fixed version (ground truth):
/** 
 * <p> Copy source image data to destination Image. </p> <p> Only support the copy between two non-  {@link ImageFormat#PRIVATE PRIVATE} formatimages with same properties (format, size, etc.). The data from the source image will be copied to the byteBuffers from the destination Image starting from position zero, and the destination image will be rewound to zero after copy is done. </p>
 * @param src The source image to be copied from.
 * @param dst The destination image to be copied to.
 * @throws IllegalArgumentException If the source and destination imageshave different format, or one of the images is not copyable.
 */
public static void imageCopy(Image src,Image dst){
  if (src == null || dst == null) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (src.getFormat() != dst.getFormat()) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (src.getFormat() == ImageFormat.PRIVATE || dst.getFormat() == ImageFormat.PRIVATE) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (!(dst.getOwner() instanceof ImageWriter)) {
    throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
  }
  Size srcSize=new Size(src.getWidth(),src.getHeight());
  Size dstSize=new Size(dst.getWidth(),dst.getHeight());
  if (!srcSize.equals(dstSize)) {
    throw new IllegalArgumentException("String_Node_Str" + srcSize + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ dstSize);
  }
  Plane[] srcPlanes=src.getPlanes();
  Plane[] dstPlanes=dst.getPlanes();
  ByteBuffer srcBuffer=null;
  ByteBuffer dstBuffer=null;
  for (int i=0; i < srcPlanes.length; i++) {
    int srcRowStride=srcPlanes[i].getRowStride();
    int dstRowStride=dstPlanes[i].getRowStride();
    srcBuffer=srcPlanes[i].getBuffer();
    dstBuffer=dstPlanes[i].getBuffer();
    if (!(srcBuffer.isDirect() && dstBuffer.isDirect())) {
      throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
    }
    if (srcPlanes[i].getPixelStride() != dstPlanes[i].getPixelStride()) {
      throw new IllegalArgumentException("String_Node_Str" + srcPlanes[i].getPixelStride() + "String_Node_Str"+ dstPlanes[i].getPixelStride());
    }
    int srcPos=srcBuffer.position();
    srcBuffer.rewind();
    dstBuffer.rewind();
    if (srcRowStride == dstRowStride) {
      dstBuffer.put(srcBuffer);
    }
 else {
      int srcOffset=srcBuffer.position();
      int dstOffset=dstBuffer.position();
      Size effectivePlaneSize=getEffectivePlaneSizeForImage(src,i);
      int srcByteCount=effectivePlaneSize.getWidth() * srcPlanes[i].getPixelStride();
      for (int row=0; row < effectivePlaneSize.getHeight(); row++) {
        if (row == effectivePlaneSize.getHeight() - 1) {
          int remainingBytes=srcBuffer.remaining() - srcOffset;
          if (srcByteCount > remainingBytes) {
            srcByteCount=remainingBytes;
          }
        }
        directByteBufferCopy(srcBuffer,srcOffset,dstBuffer,dstOffset,srcByteCount);
        srcOffset+=srcRowStride;
        dstOffset+=dstRowStride;
      }
    }
    srcBuffer.position(srcPos);
    dstBuffer.rewind();
  }
}