Properly handle INT_MIN and related
authorKevin Lubick <kjlubick@google.com>
Mon, 14 Nov 2016 13:32:03 +0000 (08:32 -0500)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Mon, 14 Nov 2016 17:27:38 +0000 (17:27 +0000)
BUG=skia:5967

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4751

Change-Id: Ie846560ebdaf11e1a5247842b3549ade1e100af2
Reviewed-on: https://skia-review.googlesource.com/4751
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>

fuzz/Fuzz.h

index 5cc8bd21d8a88a73c39399f1cb5b70a40fe18de6..559addb7cf7d743de0c352bf808b74fa02905402 100644 (file)
@@ -99,15 +99,15 @@ inline void Fuzz::nextRange(T* n, Min min, Max max) {
     if (0 == range) {
         return;
     } else {
-        if (*n < 0) {
-          *n = *n * -1;
-        }
-        if (*n < 0) {
-          // abs(INT_MIN) = INT_MIN, so we check this to avoid accidental negatives.
-          *n = min;
-          return;
-        }
-        *n = min + *n % range;
+        if (*n < 0) { // Handle negatives
+            if (*n != std::numeric_limits<T>::lowest()) {
+                *n *= -1;
+            }
+            else {
+                *n = std::numeric_limits<T>::max();
+            }
+         }
+        *n = min + (*n % range);
     }
 }