Index: src/utils/SkTextureCompressor_ASTC.cpp |
diff --git a/src/utils/SkTextureCompressor_ASTC.cpp b/src/utils/SkTextureCompressor_ASTC.cpp |
index fbae8504e50fe225b3fd70dd70f07cef9f381b76..91d594a11313ed00354e5d4c46a2a575c6cd3598 100644 |
--- a/src/utils/SkTextureCompressor_ASTC.cpp |
+++ b/src/utils/SkTextureCompressor_ASTC.cpp |
@@ -793,7 +793,11 @@ static bool decode_integer_sequence( |
endBlockBit = endBit; |
} |
- decode_trit_block(dst, nBits, read_astc_bits(src, startBit, endBlockBit)); |
+ // Trit blocks are three values large. |
+ int trits[5]; |
+ decode_trit_block(trits, nBits, read_astc_bits(src, startBit, endBlockBit)); |
+ memcpy(dst, trits, SkMin32(nVals, 5)*sizeof(int)); |
+ |
dst += 5; |
nVals -= 5; |
startBit = endBlockBit; |
@@ -806,7 +810,11 @@ static bool decode_integer_sequence( |
endBlockBit = endBit; |
} |
- decode_quint_block(dst, nBits, read_astc_bits(src, startBit, endBlockBit)); |
+ // Quint blocks are three values large |
+ int quints[3]; |
+ decode_quint_block(quints, nBits, read_astc_bits(src, startBit, endBlockBit)); |
+ memcpy(dst, quints, SkMin32(nVals, 3)*sizeof(int)); |
+ |
dst += 3; |
nVals -= 3; |
startBit = endBlockBit; |
@@ -1708,7 +1716,8 @@ struct ASTCDecompressionData { |
// The rest of the CEM config will be between the dual plane bit selector |
// and the texel weight grid. |
const int lowCEM = static_cast<int>(read_astc_bits(fBlock, 23, 29)); |
- SkASSERT(lastWeight - dualPlaneBitLoc > 31); |
+ SkASSERT(lastWeight >= dualPlaneBitLoc); |
+ SkASSERT(lastWeight - dualPlaneBitLoc < 31); |
int fullCEM = static_cast<int>(read_astc_bits(fBlock, dualPlaneBitLoc, lastWeight)); |
// Attach the config at the end of the weight grid to the CEM values |