MD5 校验值:5b5c91fb96bf669521c42e375c79f86c
yp.java 文件包含反编译后的源代码,请注意,该内容仅供学习和参考使用,不得用于非法用途。
package o; import android.util.Log; import com.bumptech.glide.load.ImageHeaderParser; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.charset.Charset; public final class yp implements ImageHeaderParser { public static final byte[] a = "Exif\u0000\u0000".getBytes(Charset.forName("UTF-8")); public static final int[] b = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8}; public static final class a implements c { public final ByteBuffer a; public a(ByteBuffer byteBuffer) { this.a = byteBuffer; byteBuffer.order(ByteOrder.BIG_ENDIAN); } @Override public int a(byte[] bArr, int i) { int min = Math.min(i, this.a.remaining()); if (min == 0) { return -1; } this.a.get(bArr, 0, min); return min; } @Override public long b(long j) { int min = (int) Math.min(this.a.remaining(), j); ByteBuffer byteBuffer = this.a; byteBuffer.position(byteBuffer.position() + min); return min; } @Override public short c() { if (this.a.remaining() >= 1) { return (short) (this.a.get() & 255); } throw new c.a(); } @Override public void citrus() { } @Override public int d() { return (c() << 8) | c(); } } public static final class b { public final ByteBuffer a; public b(byte[] bArr, int i) { this.a = (ByteBuffer) ByteBuffer.wrap(bArr).order(ByteOrder.BIG_ENDIAN).limit(i); } public short a(int i) { if (c(i, 2)) { return this.a.getShort(i); } return (short) -1; } public int b(int i) { if (c(i, 4)) { return this.a.getInt(i); } return -1; } public final boolean c(int i, int i2) { return this.a.remaining() - i >= i2; } public void citrus() { } public int d() { return this.a.remaining(); } public void e(ByteOrder byteOrder) { this.a.order(byteOrder); } } public interface c { public static final class a extends IOException { public a() { super("Unexpectedly reached end of a file"); } } int a(byte[] bArr, int i); long b(long j); short c(); default void citrus() { } int d(); } public static final class d implements c { public final InputStream a; public d(InputStream inputStream) { this.a = inputStream; } @Override public int a(byte[] bArr, int i) { int i2 = 0; int i3 = 0; while (i2 < i && (i3 = this.a.read(bArr, i2, i - i2)) != -1) { i2 += i3; } if (i2 == 0 && i3 == -1) { throw new c.a(); } return i2; } @Override public long b(long j) { if (j < 0) { return 0L; } long j2 = j; while (j2 > 0) { long skip = this.a.skip(j2); if (skip <= 0) { if (this.a.read() == -1) { break; } skip = 1; } j2 -= skip; } return j - j2; } @Override public short c() { int read = this.a.read(); if (read != -1) { return (short) read; } throw new c.a(); } @Override public void citrus() { } @Override public int d() { return (c() << 8) | c(); } } public static int d(int i, int i2) { return i + 2 + (i2 * 12); } public static boolean g(int i) { return (i & 65496) == 65496 || i == 19789 || i == 18761; } public static int j(b bVar) { ByteOrder byteOrder; short a2 = bVar.a(6); if (a2 != 18761) { if (a2 != 19789) { if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Unknown endianness = " + ((int) a2)); } byteOrder = ByteOrder.BIG_ENDIAN; } else { byteOrder = ByteOrder.BIG_ENDIAN; } } else { byteOrder = ByteOrder.LITTLE_ENDIAN; } bVar.e(byteOrder); int b2 = bVar.b(10) + 6; short a3 = bVar.a(b2); for (int i = 0; i < a3; i++) { int d2 = d(b2, i); short a4 = bVar.a(d2); if (a4 == 274) { short a5 = bVar.a(d2 + 2); if (a5 >= 1 && a5 <= 12) { int b3 = bVar.b(d2 + 4); if (b3 < 0) { if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Negative tiff component count"); } } else { if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Got tagIndex=" + i + " tagType=" + ((int) a4) + " formatCode=" + ((int) a5) + " componentCount=" + b3); } int i2 = b3 + b[a5]; if (i2 > 4) { if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Got byte count > 4, not orientation, continuing, formatCode=" + ((int) a5)); } } else { int i3 = d2 + 8; if (i3 >= 0 && i3 <= bVar.d()) { if (i2 >= 0 && i2 + i3 <= bVar.d()) { return bVar.a(i3); } if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Illegal number of bytes for TI tag data tagType=" + ((int) a4)); } } else if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Illegal tagValueOffset=" + i3 + " tagType=" + ((int) a4)); } } } } else if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Got invalid format code = " + ((int) a5)); } } } return -1; } @Override public ImageHeaderParser.ImageType a(ByteBuffer byteBuffer) { return f(new a((ByteBuffer) zt0.d(byteBuffer))); } @Override public int b(InputStream inputStream, d7 d7Var) { return e(new d((InputStream) zt0.d(inputStream)), (d7) zt0.d(d7Var)); } @Override public ImageHeaderParser.ImageType c(InputStream inputStream) { return f(new d((InputStream) zt0.d(inputStream))); } @Override public void citrus() { } public final int e(c cVar, d7 d7Var) { try { int d2 = cVar.d(); if (!g(d2)) { if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Parser doesn't handle magic number: " + d2); } return -1; } int i = i(cVar); if (i == -1) { if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Failed to parse exif segment length, or exif segment not found"); } return -1; } byte[] bArr = (byte[]) d7Var.e(i, byte[].class); try { return k(cVar, bArr, i); } finally { d7Var.d(bArr); } } catch (c.a unused) { return -1; } } public final ImageHeaderParser.ImageType f(c cVar) { try { int d2 = cVar.d(); if (d2 == 65496) { return ImageHeaderParser.ImageType.JPEG; } int c2 = (d2 << 8) | cVar.c(); if (c2 == 4671814) { return ImageHeaderParser.ImageType.GIF; } int c3 = (c2 << 8) | cVar.c(); if (c3 == -1991225785) { cVar.b(21L); try { if (cVar.c() >= 3) { return ImageHeaderParser.ImageType.PNG_A; } return ImageHeaderParser.ImageType.PNG; } catch (c.a unused) { return ImageHeaderParser.ImageType.PNG; } } if (c3 != 1380533830) { return ImageHeaderParser.ImageType.UNKNOWN; } cVar.b(4L); if (((cVar.d() << 16) | cVar.d()) != 1464156752) { return ImageHeaderParser.ImageType.UNKNOWN; } int d3 = (cVar.d() << 16) | cVar.d(); if ((d3 & (-256)) != 1448097792) { return ImageHeaderParser.ImageType.UNKNOWN; } int i = d3 & 255; if (i == 88) { cVar.b(4L); if ((cVar.c() & 16) != 0) { return ImageHeaderParser.ImageType.WEBP_A; } return ImageHeaderParser.ImageType.WEBP; } if (i == 76) { cVar.b(4L); if ((cVar.c() & 8) != 0) { return ImageHeaderParser.ImageType.WEBP_A; } return ImageHeaderParser.ImageType.WEBP; } return ImageHeaderParser.ImageType.WEBP; } catch (c.a unused2) { return ImageHeaderParser.ImageType.UNKNOWN; } } public final boolean h(byte[] bArr, int i) { boolean z = bArr != null && i > a.length; if (z) { int i2 = 0; while (true) { byte[] bArr2 = a; if (i2 >= bArr2.length) { break; } if (bArr[i2] != bArr2[i2]) { return false; } i2++; } } return z; } public final int i(c cVar) { short c2; int d2; long j; long b2; do { short c3 = cVar.c(); if (c3 != 255) { if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Unknown segmentId=" + ((int) c3)); } return -1; } c2 = cVar.c(); if (c2 == 218) { return -1; } if (c2 == 217) { if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Found MARKER_EOI in exif segment"); } return -1; } d2 = cVar.d() - 2; if (c2 != 225) { j = d2; b2 = cVar.b(j); } else { return d2; } } while (b2 == j); if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Unable to skip enough data, type: " + ((int) c2) + ", wanted to skip: " + d2 + ", but actually skipped: " + b2); } return -1; } public final int k(c cVar, byte[] bArr, int i) { int a2 = cVar.a(bArr, i); if (a2 != i) { if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Unable to read exif segment data, length: " + i + ", actually read: " + a2); } return -1; } if (h(bArr, i)) { return j(new b(bArr, i)); } if (Log.isLoggable("DfltImageHeaderParser", 3)) { Log.d("DfltImageHeaderParser", "Missing jpeg exif preamble"); } return -1; } }