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