From c920d0da9c8a9ebdcc6c94acf98eda8d975f3e15 Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Wed, 2 Mar 2022 10:06:20 -0800 Subject: [PATCH] Fix possible negative offset to lseek() CID 327965 --- src/sbbs3/js_file.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/sbbs3/js_file.c b/src/sbbs3/js_file.c index 6df0610a5d..d7b84c5c06 100644 --- a/src/sbbs3/js_file.c +++ b/src/sbbs3/js_file.c @@ -406,15 +406,18 @@ js_raw_read(JSContext *cx, uintN argc, jsval *arglist) * required by POSIX. */ fflush(p->fp); - pos = ftell(p->fp); - fd = fileno(p->fp); - lseek(fd, pos, SEEK_SET); - len = read(fileno(p->fp),buf,len); - fseeko(p->fp, pos + (len >= 0 ? len : 0), SEEK_SET); - dbprintf(FALSE, p, "read %u raw bytes",len); - if(len<0) - len=0; - + pos = ftello(p->fp); + if(pos < 0) + len = 0; + else { + fd = fileno(p->fp); + lseek(fd, pos, SEEK_SET); + len = read(fileno(p->fp),buf,len); + fseeko(p->fp, pos + (len >= 0 ? len : 0), SEEK_SET); + dbprintf(FALSE, p, "read %d raw bytes",len); + if(len<0) + len=0; + } JS_RESUMEREQUEST(cx, rc); str = JS_NewStringCopyN(cx, buf, len); -- GitLab