git: 9front

Download patch

ref: 3ad7388b7424d20f343d12b4f2282fc6d3938e9e
parent: a6e5d4bae6075c741a39fcba62a365d9dffaed93
author: qwx <qwx@sciops.net>
date: Mon Oct 20 05:01:06 EDT 2025

awk: properly handle number to rune conversion and empty strings in *printf

fixes the following cases:
echo '' | awk '{ x = sprintf("_%c_%c", $1, $2); print x }'
awk 'BEGIN{ printf "%c\n", 9320 }'

--- a/sys/src/cmd/awk/run.c
+++ b/sys/src/cmd/awk/run.c
@@ -957,18 +957,16 @@
 			break;
 		case 5:
 			if (isnum(x)) {
-				if (getfval(x)) {
-					*p++ = (uchar)getfval(x);
-					*p = '\0';
-				} else {
-					*p++ = '\0';
-					*p = '\0';
-				}
-			} else {
-				chartorune(&r, getsval(x));
+				r = getfval(x);
 				p += runetochar(p, &r);
-				*p = '\0';
+			} else {
+				t = getsval(x);
+				if(*t != '\0'){
+					chartorune(&r, t);
+					p += runetochar(p, &r);
+				}
 			}
+			*p = '\0';
 			break;
 		}
 		if (istemp(x))
--