]> granicus.if.org Git - graphviz/commitdiff
common decreasingrankcmpf: rephrase comparator to avoid arithmetic
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 24 Jul 2022 04:51:17 +0000 (21:51 -0700)
cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

lib/common/ns.c

index 7581885ec1f5f3d6cd77800ac5e26cd4c6e8a189..6968135eb2d25b3fd6427606b6b73c3b9d43ff6c 100644 (file)
@@ -679,7 +679,13 @@ static void LR_balance(void)
 }
 
 static int decreasingrankcmpf(node_t **n0, node_t **n1) {
-  return ND_rank(*n1) - ND_rank(*n0);
+  if (ND_rank(*n1) < ND_rank(*n0)) {
+    return -1;
+  }
+  if (ND_rank(*n1) > ND_rank(*n0)) {
+    return 1;
+  }
+  return 0;
 }
 
 static int increasingrankcmpf(node_t **n0, node_t **n1) {