diff --git a/src/sbbs3/js_file.c b/src/sbbs3/js_file.c
index 6df0610a5d75b2e34b5e514a4d326816455b4691..d7b84c5c064fc4a51f194eac82f3c94ed39dcea9 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);