aboutsummaryrefslogtreecommitdiff
path: root/library/src/main/java/com/bumptech
diff options
context:
space:
mode:
authorSam Judd <judds@google.com>2014-09-30 10:44:26 -0700
committerSam Judd <judds@google.com>2014-09-30 10:44:26 -0700
commit91289b40e72aee1f4cfce66e536a141e91b39c50 (patch)
treedad56e4e308b6e8ed3d2456e816dea7bf6e090ed /library/src/main/java/com/bumptech
parentf9f9d2ba98eabe692df0a893b497993681fe24b0 (diff)
downloadglide-91289b40e72aee1f4cfce66e536a141e91b39c50.tar.gz
FindBugs fixes.
Diffstat (limited to 'library/src/main/java/com/bumptech')
-rw-r--r--library/src/main/java/com/bumptech/glide/load/data/HttpUrlFetcher.java13
-rw-r--r--library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/GroupedLinkedMap.java8
-rw-r--r--library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java4
-rw-r--r--library/src/main/java/com/bumptech/glide/load/engine/executor/FifoPriorityThreadPoolExecutor.java30
-rw-r--r--library/src/main/java/com/bumptech/glide/load/model/GlideUrl.java22
-rw-r--r--library/src/main/java/com/bumptech/glide/load/model/UriLoader.java4
-rw-r--r--library/src/main/java/com/bumptech/glide/load/resource/bitmap/ImageHeaderParser.java28
-rw-r--r--library/src/main/java/com/bumptech/glide/load/resource/bitmap/RecyclableBufferedInputStream.java2
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;
}