]> granicus.if.org Git - graphviz/commitdiff
fdpgen ijcmpf: 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/fdpgen/grid.c

index 029a171df399f3977d77ef9aa507f05f4c2351a5..13a9fa14ed43f5771560592c430673f71aee6c43 100644 (file)
@@ -94,14 +94,22 @@ static cell *getCell(Grid * g)
 
 static int ijcmpf(Dt_t * d, gridpt * p1, gridpt * p2, Dtdisc_t * disc)
 {
-    int diff;
-
     (void)d;
     (void)disc;
-    if ((diff = p1->i - p2->i))
-       return diff;
-    else
-       return p1->j - p2->j;
+
+    if (p1->i < p2->i) {
+        return -1;
+    }
+    if (p1->i > p2->i) {
+        return 1;
+    }
+    if (p1->j < p2->j) {
+        return -1;
+    }
+    if (p1->j > p2->j) {
+        return 1;
+    }
+    return 0;
 }
 
 static Grid *_grid;            /* hack because can't attach info. to Dt_t */