From: Matthew Fernandez Date: Sun, 9 Aug 2020 01:48:41 +0000 (-0700) Subject: avoid storing pointer diff in an int X-Git-Tag: 2.46.0~20^2^2~124^2~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=757513a015a13b96718baf55e1cefc1e6b85589d;p=graphviz avoid storing pointer diff in an int The distance between endb and next was being stored in an int variable. While this should not exceed the bounds of an int during normal usage, it's risky to store a pointer difference in a narrower type this way. --- diff --git a/lib/sfio/sfmode.c b/lib/sfio/sfmode.c index 1339b7f30..f080efa65 100644 --- a/lib/sfio/sfmode.c +++ b/lib/sfio/sfmode.c @@ -12,6 +12,7 @@ *************************************************************************/ #include +#include static char *Version = "\n@(#)sfio (AT&T Labs - kpv) 2001-02-01\0\n"; /* Functions to set a given stream to some desired mode @@ -300,7 +301,6 @@ static int _sfpmode(Sfio_t * f, int type) */ int _sfmode(reg Sfio_t * f, reg int wanted, reg int local) { - reg int n; Sfoff_t addr; reg int rv = 0; @@ -381,7 +381,7 @@ int _sfmode(reg Sfio_t * f, reg int wanted, reg int local) else f->endw = f->endb; } else { - n = f->flags; + unsigned short n = f->flags; (void) SFSETBUF(f, f->data, f->size); f->flags |= (n & SF_MALLOC); } @@ -458,7 +458,7 @@ int _sfmode(reg Sfio_t * f, reg int wanted, reg int local) /* reset buffer and seek pointer */ if (!(f->mode & SF_SYNCED)) { - n = f->endb - f->next; + intptr_t n = (intptr_t)(f->endb - f->next); if (f->extent >= 0 && (n > 0 || (f->data && (f->bits & SF_MMAP)))) { /* reset file pointer */ addr = f->here - n; if (SFSK(f, addr, SEEK_SET, f->disc) < 0)