diff options
author | 2015-12-07 10:38:05 -0800 | |
---|---|---|
committer | 2015-12-07 10:38:05 -0800 | |
commit | d5c4265b49d212f7888d0516328f39c4d45d3058 (patch) | |
tree | fa6394fa20aa2c2bf26f1aa9efa88d0ff2da5122 /src/core/SkMatrix.cpp | |
parent | d18b1b5adc15afd9b57ddecf779dccbcc85098f1 (diff) |
Fix up signed-integer-overflow warnings
When checking whether a matrix was a pure scale, we subtracted
0x3f800000 from the diagonals; if the diagonal value was already
very negative, we'd underflow. Replace subtraction with XOR.
When dealing with repeating tiled bitmaps, when the bitmap was
very large, we'd multiply an offset by 65535, possibly causing
underflow. Throw in a cast to long (casting to unsigned also
silences the warning and wouldn't involve extension, but I can't
convince myself that it's correct).
BUG=skia:4635
R=mtklein@google.com
Review URL: https://codereview.chromium.org/1504933002
Diffstat (limited to 'src/core/SkMatrix.cpp')
-rw-r--r-- | src/core/SkMatrix.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp index b32f372bbd..6101eb9f9a 100644 --- a/src/core/SkMatrix.cpp +++ b/src/core/SkMatrix.cpp @@ -156,7 +156,7 @@ uint8_t SkMatrix::computeTypeMask() const { } else { // Only test for scale explicitly if not affine, since affine sets the // scale bit. - if ((m00 - kScalar1Int) | (m11 - kScalar1Int)) { + if ((m00 ^ kScalar1Int) | (m11 ^ kScalar1Int)) { mask |= kScale_Mask; } |