]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Coverity dislikes (double) (int/int).
authorNick Mathewson <nickm@torproject.org>
Mon, 13 Jun 2016 15:25:19 +0000 (11:25 -0400)
committerNick Mathewson <nickm@torproject.org>
Mon, 13 Jun 2016 15:25:19 +0000 (11:25 -0400)
When you divide an int by an int and get a fraction and _then_ cast
to double, coverity assumes that you meant to cast to a double
first.

In my fix for -Wfloat-conversion in 493499a3399f8a8532b4b2a80006, I
did something like this that coverity didn't like.

Instead, I'm taking another approach here.

Fixes CID 1232089, I hope.

src/or/routerlist.c

index 46492c571fb39b692bc2c4b9edb9fb869d189f51..aaa8fad178855491af1cf2f39103009e43350204 100644 (file)
@@ -2176,22 +2176,20 @@ scale_array_elements_to_u64(uint64_t *entries_out, const double *entries_in,
   double total = 0.0;
   double scale_factor = 0.0;
   int i;
-  /* big, but far away from overflowing an int64_t */
-#define SCALE_TO_U64_MAX ((double) (INT64_MAX / 4))
 
   for (i = 0; i < n_entries; ++i)
     total += entries_in[i];
 
-  if (total > 0.0)
-    scale_factor = SCALE_TO_U64_MAX / total;
+  if (total > 0.0) {
+    scale_factor = ((double)INT64_MAX) / total;
+    scale_factor /= 4.0; /* make sure we're very far away from overflowing */
+  }
 
   for (i = 0; i < n_entries; ++i)
     entries_out[i] = tor_llround(entries_in[i] * scale_factor);
 
   if (total_out)
     *total_out = (uint64_t) total;
-
-#undef SCALE_TO_U64_MAX
 }
 
 /** Pick a random element of <b>n_entries</b>-element array <b>entries</b>,