]> granicus.if.org Git - graphviz/commitdiff
pathplan: use a 'size_t' for counting triangles
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 13 Nov 2022 18:23:11 +0000 (10:23 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 13 Nov 2022 22:55:49 +0000 (14:55 -0800)
Squashes:

  shortest.c: In function ‘growtris’:
  shortest.c:518:39: warning: conversion to ‘long unsigned int’ from ‘int’ may
    change the sign of the result [-Wsign-conversion]
    518 |     tris = realloc(tris, TRIANGLESIZE * newtrin);
        |                                       ^

At the call site for `growtris`, it is not clear to me why `trin + 20` is
enough. That is, it seems like this branch can be hit, reallocation can succeed,
but `tril` was greater than `trin + 20` so the array remains too small for the
follow on computation. But this is a separate problem.

lib/pathplan/shortest.c

index 521fc18fd2f90558f08575ae8a6a3ee7c2afaf9c..db490514e0d1fbfa77964226ae7c702334fa973d 100644 (file)
@@ -60,7 +60,8 @@ static size_t pnln;
 static int pnll;
 
 static triangle_t *tris;
-static int trin, tril;
+static size_t trin;
+static int tril;
 
 static deque_t dq;
 
@@ -83,7 +84,7 @@ static bool between(Ppoint_t *, Ppoint_t *, Ppoint_t *);
 static int pointintri(long, Ppoint_t *);
 
 static int growpnls(size_t);
-static int growtris(int);
+static int growtris(size_t);
 static int growdq(int);
 static int growops(int);
 
@@ -356,7 +357,7 @@ static int loadtriangle(pointnlink_t * pnlap, pointnlink_t * pnlbp,
     int ei;
 
     /* make space */
-    if (tril >= trin) {
+    if (tril >= 0 && (size_t)tril >= trin) {
        if (growtris(trin + 20) != 0)
                return -1;
     }
@@ -513,8 +514,7 @@ static int growpnls(size_t newpnln) {
     return 0;
 }
 
-static int growtris(int newtrin)
-{
+static int growtris(size_t newtrin) {
     tris = realloc(tris, TRIANGLESIZE * newtrin);
     if (tris == NULL) {
        prerror("cannot realloc tris");