From 225fb98e1e321fa80e3457fafcd5d1fa14d9f8c3 Mon Sep 17 00:00:00 2001 From: mtklein Date: Wed, 5 Nov 2014 11:35:21 -0800 Subject: [PATCH] Avoid dec = -dec overflow when appending most negative signed integers. BUG=skia:3096 Review URL: https://codereview.chromium.org/700953003 --- src/core/SkString.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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* SkStrAppendU32(char string[], uint32_t dec) { } 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(dec)); + return SkStrAppendU32(string, udec); } char* SkStrAppendU64(char string[], uint64_t dec, int minDigits) { @@ -124,11 +125,12 @@ char* SkStrAppendU64(char string[], uint64_t dec, int minDigits) { } 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(dec), minDigits); + return SkStrAppendU64(string, udec, minDigits); } char* SkStrAppendFloat(char string[], float value) { -- 2.7.4