diff options
Diffstat (limited to 'android/guava/src/com/google/common/io/BaseEncoding.java')
-rw-r--r-- | android/guava/src/com/google/common/io/BaseEncoding.java | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/android/guava/src/com/google/common/io/BaseEncoding.java b/android/guava/src/com/google/common/io/BaseEncoding.java index d7f87e633..f926c17be 100644 --- a/android/guava/src/com/google/common/io/BaseEncoding.java +++ b/android/guava/src/com/google/common/io/BaseEncoding.java @@ -28,13 +28,13 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; import com.google.common.base.Ascii; import com.google.common.base.Objects; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.util.Arrays; -import org.checkerframework.checker.nullness.compatqual.MonotonicNonNullDecl; import org.checkerframework.checker.nullness.compatqual.NullableDecl; /** @@ -772,6 +772,27 @@ public abstract class BaseEncoding { } @Override + public int read(byte[] buf, int off, int len) throws IOException { + // Overriding this to work around the fact that InputStream's default implementation of + // this method will silently swallow exceptions thrown by the single-byte read() method + // (other than on the first call to it), which in this case can cause invalid encoded + // strings to not throw an exception. + // See https://github.com/google/guava/issues/3542 + checkPositionIndexes(off, off + len, buf.length); + + int i = off; + for (; i < off + len; i++) { + int b = read(); + if (b == -1) { + int read = i - off; + return read == 0 ? -1 : read; + } + buf[i] = (byte) b; + } + return i - off; + } + + @Override public void close() throws IOException { reader.close(); } @@ -810,8 +831,8 @@ public abstract class BaseEncoding { return new SeparatedBaseEncoding(this, separator, afterEveryChars); } - @MonotonicNonNullDecl private transient BaseEncoding upperCase; - @MonotonicNonNullDecl private transient BaseEncoding lowerCase; + @LazyInit @NullableDecl private transient BaseEncoding upperCase; + @LazyInit @NullableDecl private transient BaseEncoding lowerCase; @Override public BaseEncoding upperCase() { @@ -1032,12 +1053,12 @@ public abstract class BaseEncoding { @GwtIncompatible // Writer static Writer separatingWriter( final Writer delegate, final String separator, final int afterEveryChars) { - final Appendable seperatingAppendable = + final Appendable separatingAppendable = separatingAppendable(delegate, separator, afterEveryChars); return new Writer() { @Override public void write(int c) throws IOException { - seperatingAppendable.append((char) c); + separatingAppendable.append((char) c); } @Override |