Commit Diff


commit - 5cb6d5d9c236f7a11b7c9e0d2c991e1bf9ddd363
commit + f92a2ceba411689890e6f8aab81a03f30b802b10
blob - 6e127986e8ffde812ff0eadc4c17b1a9ffd40d02
blob + 7c4a5898ac739b05c12c05783c39195a4f84c677
--- src/lib9/encodefmt.c
+++ src/lib9/encodefmt.c
@@ -11,16 +11,18 @@ encodefmt(Fmt *f)
 	uchar *b;
 	char obuf[64];	// rsc optimization
 
-	if(!(f->flags&FmtPrec) || f->prec < 1)
-		goto error;
-
 	b = va_arg(f->args, uchar*);
 	if(b == 0)
 		return fmtstrcpy(f, "<nil>");
 
 	ilen = f->prec;
 	f->prec = 0;
+
+	if(!(f->flags&FmtPrec) || ilen < 0)
+		goto error;
+
 	f->flags &= ~FmtPrec;
+
 	switch(f->r){
 	case '<':
 		len = (8*ilen+4)/5 + 3;