From 757513a015a13b96718baf55e1cefc1e6b85589d Mon Sep 17 00:00:00 2001 From: Matthew Fernandez Date: Sat, 8 Aug 2020 18:48:41 -0700 Subject: [PATCH] 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. --- lib/sfio/sfmode.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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) -- 2.50.1