lib.c: Don't try pointer arithmetic on void pointers.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 13 May 2021 15:24:32 +0000 (16:24 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 13 May 2021 15:24:32 +0000 (16:24 +0100)
Here, `av->o' is a count of array slots, not bytes, so this is wrong:
rewrite to use the correct kind of pointer.  Fortunately, nothing
actually uses this machinery.

It's honestly a bit vexing that GCC lets me get away with this.  Spotted
by Coverity.

lib.c

diff --git a/lib.c b/lib.c
index edb6e33..0d618f6 100644 (file)
--- a/lib.c
+++ b/lib.c
@@ -267,7 +267,7 @@ void argv_ensure(struct argv *av, size_t n)
   if (need <= av->sz) return;
   newsz = av->sz ? 2*av->sz : 8;
   while (newsz < need) newsz *= 2;
-  av->v = xrealloc(av->v - av->o, newsz*sizeof(char *)) + av->o;
+  av->v = xrealloc(av->v - av->o, newsz*sizeof(char *)); av->v += av->o;
   av->sz = newsz;
 }