diff options
author | Sam Judd <judds@google.com> | 2014-09-30 10:44:26 -0700 |
---|---|---|
committer | Sam Judd <judds@google.com> | 2014-09-30 10:44:26 -0700 |
commit | 91289b40e72aee1f4cfce66e536a141e91b39c50 (patch) | |
tree | dad56e4e308b6e8ed3d2456e816dea7bf6e090ed /library/src/main/java/com/bumptech | |
parent | f9f9d2ba98eabe692df0a893b497993681fe24b0 (diff) | |
download | glide-91289b40e72aee1f4cfce66e536a141e91b39c50.tar.gz |
FindBugs fixes.
Diffstat (limited to 'library/src/main/java/com/bumptech')
8 files changed, 75 insertions, 36 deletions
diff --git a/library/src/main/java/com/bumptech/glide/load/data/HttpUrlFetcher.java b/library/src/main/java/com/bumptech/glide/load/data/HttpUrlFetcher.java index 71e7ffb0..7b603a4b 100644 --- a/library/src/main/java/com/bumptech/glide/load/data/HttpUrlFetcher.java +++ b/library/src/main/java/com/bumptech/glide/load/data/HttpUrlFetcher.java @@ -7,6 +7,7 @@ import com.bumptech.glide.load.model.GlideUrl; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; +import java.net.URISyntaxException; import java.net.URL; /** @@ -41,8 +42,16 @@ public class HttpUrlFetcher implements DataFetcher<InputStream> { private InputStream loadDataWithRedirects(URL url, int redirects, URL lastUrl) throws IOException { if (redirects >= MAXIMUM_REDIRECTS) { throw new IOException("Too many (> " + MAXIMUM_REDIRECTS + ") redirects!"); - } else if (url.equals(lastUrl)) { - throw new IOException("In re-direct loop"); + } else { + // Comparing the URLs using .equals performs additional network I/O and is generally broken. + // See http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-hashcode-make.html. + try { + if (lastUrl != null && url.toURI().equals(lastUrl.toURI())) { + throw new IOException("In re-direct loop"); + } + } catch (URISyntaxException e) { + // Do nothing, this is best effort. + } } urlConnection = connectionFactory.build(url); urlConnection.setConnectTimeout(2500); diff --git a/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/GroupedLinkedMap.java b/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/GroupedLinkedMap.java index 1728cae4..4042daf4 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/GroupedLinkedMap.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/GroupedLinkedMap.java @@ -71,18 +71,18 @@ class GroupedLinkedMap<K extends Poolable, V> { @Override public String toString() { - String result = "GroupedLinkedMap( "; + StringBuilder sb = new StringBuilder("GroupedLinkedMap( "); LinkedEntry<K, V> current = head.next; boolean hadAtLeastOneItem = false; while (current != head) { hadAtLeastOneItem = true; - result += "{" + current.key + ":" + current.size() + "}, "; + sb.append("{").append(current.key).append(":").append(current.size()).append("}, "); current = current.next; } if (hadAtLeastOneItem) { - result = result.substring(0, result.length() - 2); + sb.delete(sb.length() - 2, sb.length()); } - return result + " )"; + return sb.append(" )").toString(); } // Make the entry the most recently used item. diff --git a/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java b/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java index 39afcf3b..c5767869 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java @@ -54,7 +54,7 @@ public class LruBitmapPool implements BitmapPool { } @Override - public void setSizeMultiplier(float sizeMultiplier) { + public synchronized void setSizeMultiplier(float sizeMultiplier) { maxSize = Math.round(initialMaxSize * sizeMultiplier); evict(); } @@ -138,7 +138,7 @@ public class LruBitmapPool implements BitmapPool { } } - private void trimToSize(int size) { + private synchronized void trimToSize(int size) { while (currentSize > size) { final Bitmap removed = strategy.removeLast(); tracker.remove(removed); diff --git a/library/src/main/java/com/bumptech/glide/load/engine/executor/FifoPriorityThreadPoolExecutor.java b/library/src/main/java/com/bumptech/glide/load/engine/executor/FifoPriorityThreadPoolExecutor.java index 959cb66f..9972fc6d 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/executor/FifoPriorityThreadPoolExecutor.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/executor/FifoPriorityThreadPoolExecutor.java @@ -72,9 +72,37 @@ public class FifoPriorityThreadPoolExecutor extends ThreadPoolExecutor { } @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + FifoPriorityLoadTask that = (FifoPriorityLoadTask) o; + + if (order != that.order) { + return false; + } + if (priority != that.priority) { + return false; + } + + return true; + } + + @Override + public int hashCode() { + int result = priority; + result = 31 * result + order; + return result; + } + + @Override public int compareTo(FifoPriorityLoadTask<?> loadTask) { int result = priority - loadTask.priority; - if (result == 0 && loadTask != this) { + if (result == 0) { result = order - loadTask.order; } return result; diff --git a/library/src/main/java/com/bumptech/glide/load/model/GlideUrl.java b/library/src/main/java/com/bumptech/glide/load/model/GlideUrl.java index b87b3cf2..fcd2d860 100644 --- a/library/src/main/java/com/bumptech/glide/load/model/GlideUrl.java +++ b/library/src/main/java/com/bumptech/glide/load/model/GlideUrl.java @@ -42,6 +42,7 @@ public class GlideUrl { this.url = null; } + public URL toURL() throws MalformedURLException { return getSafeUrl(); } @@ -77,28 +78,11 @@ public class GlideUrl { return false; } - GlideUrl glideUrl = (GlideUrl) o; - if (stringUrl != null) { - if (glideUrl.stringUrl != null) { - return stringUrl.equals(glideUrl.stringUrl); - } else { - return stringUrl.equals(glideUrl.url.toString()); - } - } else { - if (glideUrl.stringUrl != null) { - return url.toString().equals(glideUrl.stringUrl); - } else { - return url.equals(glideUrl.url); - } - } + return toString().equals(o.toString()); } @Override public int hashCode() { - if (stringUrl != null) { - return stringUrl.hashCode(); - } else { - return url.toString().hashCode(); - } + return toString().hashCode(); } } diff --git a/library/src/main/java/com/bumptech/glide/load/model/UriLoader.java b/library/src/main/java/com/bumptech/glide/load/model/UriLoader.java index 023333cf..6120db45 100644 --- a/library/src/main/java/com/bumptech/glide/load/model/UriLoader.java +++ b/library/src/main/java/com/bumptech/glide/load/model/UriLoader.java @@ -13,10 +13,6 @@ import com.bumptech.glide.load.data.DataFetcher; * @param <T> The type of data that will be retrieved for {@link android.net.Uri}s. */ public abstract class UriLoader<T> implements ModelLoader<Uri, T> { - private static final String ASSET_PATH_SEGMENT = "android_asset"; - private static final String ASSET_PREFIX = ContentResolver.SCHEME_FILE + ":///" + ASSET_PATH_SEGMENT + "/"; - private static final int ASSET_PREFIX_LENGTH = ASSET_PREFIX.length(); - private final Context context; private final ModelLoader<GlideUrl, T> urlLoader; diff --git a/library/src/main/java/com/bumptech/glide/load/resource/bitmap/ImageHeaderParser.java b/library/src/main/java/com/bumptech/glide/load/resource/bitmap/ImageHeaderParser.java index 25f3fdaa..bfca7b59 100644 --- a/library/src/main/java/com/bumptech/glide/load/resource/bitmap/ImageHeaderParser.java +++ b/library/src/main/java/com/bumptech/glide/load/resource/bitmap/ImageHeaderParser.java @@ -4,6 +4,7 @@ import android.util.Log; import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.ByteOrder; @@ -52,6 +53,17 @@ public class ImageHeaderParser { // "II". private static final int INTEL_TIFF_MAGIC_NUMBER = 0x4949; private static final String JPEG_EXIF_SEGMENT_PREAMBLE = "Exif\0\0"; + private static final byte[] JPEG_EXIF_SEGMENT_PREAMBLE_BYTES; + + static { + byte[] bytes = new byte[0]; + try { + bytes = JPEG_EXIF_SEGMENT_PREAMBLE.getBytes("UTF-8"); + } catch (UnsupportedEncodingException e) { + // Ignore. + } + JPEG_EXIF_SEGMENT_PREAMBLE_BYTES = bytes; + } private static final int SEGMENT_SOS = 0xDA; private static final int MARKER_EOI = 0xD9; @@ -116,9 +128,19 @@ public class ImageHeaderParser { return -1; } else { byte[] exifData = getExifSegment(); - if (exifData != null && exifData.length >= JPEG_EXIF_SEGMENT_PREAMBLE.length() - && new String(exifData, 0, JPEG_EXIF_SEGMENT_PREAMBLE.length()) - .equalsIgnoreCase(JPEG_EXIF_SEGMENT_PREAMBLE)) { + boolean hasJpegExifPreamble = exifData != null + && exifData.length >= JPEG_EXIF_SEGMENT_PREAMBLE_BYTES.length; + + if (hasJpegExifPreamble) { + for (int i = 0; i < JPEG_EXIF_SEGMENT_PREAMBLE_BYTES.length; i++) { + if (exifData[i] != JPEG_EXIF_SEGMENT_PREAMBLE_BYTES[i]) { + hasJpegExifPreamble = false; + break; + } + } + } + + if (hasJpegExifPreamble) { return parseExifSegment(new RandomAccessReader(exifData)); } else { return -1; diff --git a/library/src/main/java/com/bumptech/glide/load/resource/bitmap/RecyclableBufferedInputStream.java b/library/src/main/java/com/bumptech/glide/load/resource/bitmap/RecyclableBufferedInputStream.java index 5e4c7abf..23567c12 100644 --- a/library/src/main/java/com/bumptech/glide/load/resource/bitmap/RecyclableBufferedInputStream.java +++ b/library/src/main/java/com/bumptech/glide/load/resource/bitmap/RecyclableBufferedInputStream.java @@ -132,7 +132,7 @@ public class RecyclableBufferedInputStream extends FilterInputStream { if (result > 0) { markpos = -1; pos = 0; - count = result == -1 ? 0 : result; + count = result; } return result; } |