message: Handle extrapolation only case gracefully
diff: @@ -3616,10 +3616,10 @@ class CropResizeCastImage : public VectorLoader<T>, public VectorWriter<U> {
  x1_(flip_x ? out_width - 1 - min_ix : max_ix),
  y0_(flip_y ? out_height - 1 - max_iy : min_iy),
  y1_(flip_y ? out_height - 1 - min_iy : max_iy) {
  + if (min_ix_ <= max_ix_ && min_iy_ <= max_iy_) {
  // copy xs values, but filter out the following:
  // xs[].lower == xs[].upper AND xs[].lerp == 0
  // xs[].lower == xs[].upper AND xs[].lerp == 1
  - assert(min_ix_ <= max_ix_);
  xs_ = new CachedInterpolation[max_ix_ - min_ix_ + 1];
  for (int i = min_ix_; i <= max_ix_; ++i) {
  int ix = i - min_ix_;
  @@ -3643,6 +3643,26 @@ class CropResizeCastImage : public VectorLoader<T>, public VectorWriter<U> {
  _f_min_val = static_cast<float>(_u_min_val);
  _f_max_val = static_cast<float>(_u_max_val);
  Configure_();
  + } else {
  + // crop region outside of input image.
  + // extrapolation only.
  + general_x_ = NULL;
  + load1_x_ = NULL;
  + load2_x_ = NULL;
  + load4_x_ = NULL;
  + load8_x_ = NULL;
  + load1_offsets_ = NULL;
  + load2_offsets_ = NULL;
  + load4_offsets_ = NULL;
  + load8_offsets_ = NULL;
  + load1_shuffle_masks_ = NULL;
  + load2_shuffle_masks_ = NULL;
  + load1_mmxs_lerp_ = NULL;
  + load2_mmxs_lerp_ = NULL;
  + load4_mmxs_lerp_ = NULL;
  + load8_mmxs_lerp_ = NULL;
  + xs_ = NULL;
  + }
  }
  ~CropResizeCastImage() {
  if (general_x_ != NULL) delete[] general_x_;
  @@ -3803,6 +3823,7 @@ void CropResizeCastImage<T, U>::Resize(const T* input_image, U* output_image) {
  }
  }
  // interpolation region
  + if (min_ix_ <= max_ix_ && min_iy_ <= max_iy_) {
  int y = y0_;
  for (y = y0_; y + 1 <= y1_; y += 2) {
  const int iyA = flip_y_ ? out_height_ - 1 - min_iy_ - y : y - min_iy_;
  @@ -3968,6 +3989,7 @@ void CropResizeCastImage<T, U>::Resize(const T* input_image, U* output_image) {
  }
  }
  }
  +}
  template <class T, class U>
  void CropResizeCastImage<T, U>::ResizeRow_general_(const float ys_lerp,
  