diff options
author | Brian Duff <bduff@google.com> | 2015-06-18 18:31:16 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-06-18 18:31:16 +0000 |
commit | 6180b684fac1cdd3d8fbb69d755be6ca540d0826 (patch) | |
tree | c6f115fa4e83f8014f9e4f4c81b95af392670634 | |
parent | 9eb445da75798c275f5ea7ac0a250c92aa67aaca (diff) | |
parent | d7f9473d9e2684e9dfe54db5b32eea6b43bbcc82 (diff) | |
download | protobuf-marshmallow-dr1.6-release.tar.gz |
am d7f9473d: am 1817ed30: Merge "Update CodedOutputByteBufferNano to properly handle a malformed surrogate pair with a buffer too small to output a potentially well formed surrogate pair. This behavior mimics that of the ByteBuffer based methods."android-6.0.1_r68android-6.0.1_r67android-6.0.1_r62android-6.0.1_r54android-6.0.1_r53android-6.0.1_r45android-6.0.1_r25android-6.0.1_r24android-6.0.1_r22android-6.0.1_r21marshmallow-dr1.6-releasemarshmallow-dr1.5-releasemarshmallow-dr1.5-devandroid-live-tv
* commit 'd7f9473d9e2684e9dfe54db5b32eea6b43bbcc82':
Update CodedOutputByteBufferNano to properly handle a malformed surrogate pair with a buffer too small to output a potentially well formed surrogate pair. This behavior mimics that of the ByteBuffer based methods.
-rw-r--r-- | java/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/java/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java b/java/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java index 304c04212..662f0fa7d 100644 --- a/java/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java +++ b/java/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java @@ -500,6 +500,13 @@ public final class CodedOutputByteBufferNano { bytes[j++] = (byte) (0x80 | (0x3F & (codePoint >>> 6))); bytes[j++] = (byte) (0x80 | (0x3F & codePoint)); } else { + // If we are surrogates and we're not a surrogate pair, always throw an + // IllegalArgumentException instead of an ArrayOutOfBoundsException. + if ((Character.MIN_SURROGATE <= c && c <= Character.MAX_SURROGATE) + && (i + 1 == sequence.length() + || !Character.isSurrogatePair(c, sequence.charAt(i + 1)))) { + throw new IllegalArgumentException("Unpaired surrogate at index " + i); + } throw new ArrayIndexOutOfBoundsException("Failed writing " + c + " at index " + j); } } |