diff options
Diffstat (limited to 'java/org/brotli/dec/Transform.java')
-rw-r--r-- | java/org/brotli/dec/Transform.java | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/java/org/brotli/dec/Transform.java b/java/org/brotli/dec/Transform.java index 6a57a9e..15370cd 100644 --- a/java/org/brotli/dec/Transform.java +++ b/java/org/brotli/dec/Transform.java @@ -80,7 +80,7 @@ final class Transform { int index = 1; int j = 0; for (int i = 0; i < n; ++i) { - final char c = prefixSuffixSrc.charAt(i); + final int c = (int) prefixSuffixSrc.charAt(i); if (c == 35) { // == # prefixSuffixHeads[index++] = j; } else { @@ -89,7 +89,7 @@ final class Transform { } for (int i = 0; i < NUM_RFC_TRANSFORMS * 3; ++i) { - transforms[i] = transformsSrc.charAt(i) - 32; + transforms[i] = (int) transformsSrc.charAt(i) - 32; } } @@ -99,7 +99,7 @@ final class Transform { } static int transformDictionaryWord(byte[] dst, int dstOffset, ByteBuffer src, int srcOffset, - int len, Transforms transforms, int transformIndex) { + int wordLen, Transforms transforms, int transformIndex) { int offset = dstOffset; final int[] triplets = transforms.triplets; final byte[] prefixSuffixStorage = transforms.prefixSuffixStorage; @@ -127,16 +127,17 @@ final class Transform { dst[offset++] = prefixSuffixStorage[prefix++]; } + int len = wordLen; // Copy trimmed word. if (omitFirst > len) { omitFirst = len; } - srcOffset += omitFirst; + int dictOffset = srcOffset + omitFirst; len -= omitFirst; len -= omitLast; int i = len; while (i > 0) { - dst[offset++] = src.get(srcOffset++); + dst[offset++] = src.get(dictOffset++); i--; } @@ -147,31 +148,31 @@ final class Transform { len = 1; } while (len > 0) { - final int c0 = dst[uppercaseOffset] & 0xFF; + final int c0 = (int) dst[uppercaseOffset] & 0xFF; if (c0 < 0xC0) { if (c0 >= 97 && c0 <= 122) { // in [a..z] range - dst[uppercaseOffset] ^= (byte) 32; + dst[uppercaseOffset] = (byte) ((int) dst[uppercaseOffset] ^ 32); } uppercaseOffset += 1; len -= 1; } else if (c0 < 0xE0) { - dst[uppercaseOffset + 1] ^= (byte) 32; + dst[uppercaseOffset + 1] = (byte) ((int) dst[uppercaseOffset + 1] ^ 32); uppercaseOffset += 2; len -= 2; } else { - dst[uppercaseOffset + 2] ^= (byte) 5; + dst[uppercaseOffset + 2] = (byte) ((int) dst[uppercaseOffset + 2] ^ 5); uppercaseOffset += 3; len -= 3; } } } else if (transformType == SHIFT_FIRST || transformType == SHIFT_ALL) { int shiftOffset = offset - len; - final short param = transforms.params[transformIndex]; + final int param = (int) transforms.params[transformIndex]; /* Limited sign extension: scalar < (1 << 24). */ int scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000)); while (len > 0) { int step = 1; - final int c0 = dst[shiftOffset] & 0xFF; + final int c0 = (int) dst[shiftOffset] & 0xFF; if (c0 < 0x80) { /* 1-byte rune / 0sssssss / 7 bit scalar (ASCII). */ scalar += c0; @@ -181,7 +182,7 @@ final class Transform { } else if (c0 < 0xE0) { /* 2-byte rune / 110sssss AAssssss / 11 bit scalar. */ if (len >= 2) { - final byte c1 = dst[shiftOffset + 1]; + final int c1 = (int) dst[shiftOffset + 1]; scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6); dst[shiftOffset] = (byte) (0xC0 | ((scalar >> 6) & 0x1F)); dst[shiftOffset + 1] = (byte) ((c1 & 0xC0) | (scalar & 0x3F)); @@ -192,8 +193,8 @@ final class Transform { } else if (c0 < 0xF0) { /* 3-byte rune / 1110ssss AAssssss BBssssss / 16 bit scalar. */ if (len >= 3) { - final byte c1 = dst[shiftOffset + 1]; - final byte c2 = dst[shiftOffset + 2]; + final int c1 = (int) dst[shiftOffset + 1]; + final int c2 = (int) dst[shiftOffset + 2]; scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12); dst[shiftOffset] = (byte) (0xE0 | ((scalar >> 12) & 0x0F)); dst[shiftOffset + 1] = (byte) ((c1 & 0xC0) | ((scalar >> 6) & 0x3F)); @@ -205,9 +206,9 @@ final class Transform { } else if (c0 < 0xF8) { /* 4-byte rune / 11110sss AAssssss BBssssss CCssssss / 21 bit scalar. */ if (len >= 4) { - final byte c1 = dst[shiftOffset + 1]; - final byte c2 = dst[shiftOffset + 2]; - final byte c3 = dst[shiftOffset + 3]; + final int c1 = (int) dst[shiftOffset + 1]; + final int c2 = (int) dst[shiftOffset + 2]; + final int c3 = (int) dst[shiftOffset + 3]; scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18); dst[shiftOffset] = (byte) (0xF0 | ((scalar >> 18) & 0x07)); dst[shiftOffset + 1] = (byte) ((c1 & 0xC0) | ((scalar >> 12) & 0x3F)); |