]> granicus.if.org Git - graphviz/commitdiff
patchwork nodecmp: 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/patchwork/patchwork.c

index fb3d20101e7bc69b5aed4cd9a64c1ec8e28c775c..22e2c6d1e1984d9c22d5e30cba49a05f2b8e4570 100644 (file)
@@ -130,11 +130,13 @@ static treenode_t *mkTree (Agraph_t * g, attrsym_t* gp, attrsym_t* ap, attrsym_t
 
 static int nodecmp (treenode_t** p0, treenode_t** p1)
 {
-    double diff = (*p0)->area - (*p1)->area;
-
-    if (diff < 0) return 1;
-    else if (diff > 0) return -1;
-    else return 0;
+  if ((*p0)->area < (*p1)->area) {
+    return 1;
+  }
+  if ((*p0)->area > (*p1)->area) {
+    return -1;
+  }
+  return 0;
 }
 
 static void layoutTree(treenode_t * tree)