bumptech / glide

An image loading and caching library for Android focused on smooth scrolling
https://bumptech.github.io/glide/
Other
34.59k stars 6.12k forks source link

load fails: wrong rounding and division by zero with fitCenter() #3421

Open mice777 opened 5 years ago

mice777 commented 5 years ago

Glide Version: 4.8.0

Issue details / Repro steps / Use case background: Very similar to issue #3420 Now Downsampler.calculateScaling computes target dimensions, and can get to width or height of zero, and immediately divides by this, resulting in load error. I suggest that the computations always produce Math.max(1, ...) so that rounding to zero never happens:

Downsampler.java:
private static int round(double value) {
    return Math.max(1, (int) (value + 0.5d));
  }
}

Glide load line / GlideModule (if any) / list Adapter code (if any):

GlideApp.with(act).load(file).fitCenter().into(v)

Stack trace / LogCat:

    java.lang.ArithmeticException: divide by zero
        at com.bumptech.glide.load.resource.bitmap.Downsampler.calculateScaling(Downsampler.java:372)
        at com.bumptech.glide.load.resource.bitmap.Downsampler.decodeFromWrappedStreams(Downsampler.java:245)
        at com.bumptech.glide.load.resource.bitmap.Downsampler.decode(Downsampler.java:206)
        at com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder.decode(StreamBitmapDecoder.java:62)
        at com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder.decode(StreamBitmapDecoder.java:18)
        at com.bumptech.glide.load.resource.bitmap.BitmapDrawableDecoder.decode(BitmapDrawableDecoder.java:58)
        at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:72)
        at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:55)
        at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:45)
        at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:58)
        at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:43)
        at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:507)
        at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:472)
        at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:458)
        at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:410)
        at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:379)
        at com.bumptech.glide.load.engine.SourceGenerator.onDataReady(SourceGenerator.java:112)

Testing image 20000x1 pixels extreme wide and low

pkatre2 commented 2 years ago

can you please assign it to me , would like to contribute