shithub: riscv

Download patch

ref: 4c10b20ee85b5d2f4582137918dc014c2cd5aa7a
parent: c4c1ce10933423f5378cd68972ee12137152ad1f
author: qwx <qwx@sciops.net>
date: Sun Jan 12 10:20:10 EST 2025

fontsel: fix text buffer oob and crash due to insufficient stack size after IOUNIT change

--- a/sys/src/cmd/fontsel.c
+++ b/sys/src/cmd/fontsel.c
@@ -63,7 +63,6 @@
 static Fontdir *dirs, *cdir;
 static int ndirs, idir;
 static char lasterr[256];
-int mainstacksize = 32768;
 
 static void
 redraw(void)
@@ -238,21 +237,19 @@
 static void
 loadtext(int f)
 {
-	Biobuf b;
+	Biobuf *b;
 	int i;
 
-	if(f < 0 || Binit(&b, f, OREAD) != 0)
+	if(f < 0 || (b = Bfdopen(f, OREAD)) == nil)
 		sysfatal("loadtext: %r");
 
-	text = nil;
-	for(i = 0; i < 256; i++){
-		if((text = realloc(text, (i+1)*sizeof(char*))) == nil)
-			sysfatal("memory");
-		if((text[i] = Brdstr(&b, '\n', 1)) == nil)
+	if((text = calloc(256+1, sizeof(char*))) == nil)
+		sysfatal("memory");
+	for(i = 0; i < 256; i++)
+		if((text[i] = Brdstr(b, '\n', 1)) == nil)
 			break;
-	}
 
-	close(f);
+	Bterm(b);
 }
 
 void
--