git: 9front

Download patch

ref: aa219605f0375f72520bfe796b9db938d11d0fcc
parent: 31f9e0bcd7442552d251cdf98b14c9feb1443839
author: Ori Bernstein <ori@eigenstate.org>
date: Sun Nov 2 21:31:02 EST 2025

gefs: assert sane message sizes in tree.c

it helped find a bug in the fuzzer.

--- a/sys/src/cmd/gefs/tree.c
+++ b/sys/src/cmd/gefs/tree.c
@@ -549,6 +549,7 @@
 			ok = 0;
 			if(m.op != Oclearb && m.op != Oclobber){
 				/* New keys need to start off with Oinsert */
+if(m.op != Oinsert) fprint(2, "not insert: [%d] %M\n", m.op, &m);
 				assert(m.op == Oinsert);
 				spc -= valsz(&m);
 				p->pullsz += msgsz(&m);
@@ -755,6 +756,7 @@
 			ok = 0;
 			if(m.op != Oclearb && m.op != Oclobber){
 				/* New keys need to start off with Oinsert */
+if(m.op != Oinsert) fprint(2, "not insert: %d\n", m.op);
 				assert(m.op == Oinsert);
 				spc -= valsz(&m);
 				p->pullsz += msgsz(&m);
@@ -1272,8 +1274,11 @@
 		error(Erdonly);
 	sz = 0;
 	stablesort(msg, nmsg);
-	for(i = 0; i < nmsg; i++)
+	for(i = 0; i < nmsg; i++){
+		assert(msg[i].nk <= Keymax);
+		assert(msg[i].nv <= Inlmax);
 		sz += msgsz(&msg[i]);
+	}
 	npull = 0;
 Again:
 	b = getroot(t, &height);
@@ -1548,6 +1553,7 @@
 		getval(p[h-1].b, p[h-1].vi, &m);
 	}else{
 		getmsg(p[start-1].b, p[start-1].bi, &m);
+if(m.op != Oinsert) fprint(2, "not insert: %d\n", m.op);
 		assert(m.op == Oinsert);
 		bufsrc = start-1;
 	}
--