Avoid dec = -dec overflow when appending most negative signed integers.
BUG=skia:3096
Review URL: https://codereview.chromium.org/700953003
diff --git a/src/core/SkString.cpp b/src/core/SkString.cpp
index d3a28e2..b433515 100644
--- a/src/core/SkString.cpp
+++ b/src/core/SkString.cpp
@@ -90,11 +90,12 @@
}
char* SkStrAppendS32(char string[], int32_t dec) {
+ uint32_t udec = dec;
if (dec < 0) {
*string++ = '-';
- dec = -dec;
+ udec = ~udec + 1; // udec = -udec, but silences some warnings that are trying to be helpful
}
- return SkStrAppendU32(string, static_cast<uint32_t>(dec));
+ return SkStrAppendU32(string, udec);
}
char* SkStrAppendU64(char string[], uint64_t dec, int minDigits) {
@@ -124,11 +125,12 @@
}
char* SkStrAppendS64(char string[], int64_t dec, int minDigits) {
+ uint64_t udec = dec;
if (dec < 0) {
*string++ = '-';
- dec = -dec;
+ udec = ~udec + 1; // udec = -udec, but silences some warnings that are trying to be helpful
}
- return SkStrAppendU64(string, static_cast<uint64_t>(dec), minDigits);
+ return SkStrAppendU64(string, udec, minDigits);
}
char* SkStrAppendFloat(char string[], float value) {