← Commit list

3d57a8490

Denys Vlasenko
Denys Vlasenko
2021-07-11
SUCCESS Duration: 152s

Subject

awk: undo TI_PRINT, it introduced a bug (print with any redirect acting as printf)

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

editors/awk.c+5 -3
@@ -462,8 +462,7 @@ static const uint32_t tokeninfo[] ALIGN4 = {
0,
0, /* \n */
ST_IF, ST_DO, ST_FOR, OC_BREAK,
-#define TI_PRINT OC_PRINT
- OC_CONTINUE, OC_DELETE|Rx, TI_PRINT,
+ OC_CONTINUE, OC_DELETE|Rx, OC_PRINT,
OC_PRINTF, OC_NEXT, OC_NEXTFILE,
OC_RETURN|Vx, OC_EXIT|Nx,
ST_WHILE,
@@ -2944,7 +2943,10 @@ static var *evaluate(node *op, var *res)
F = rsm->F;
}
- if (opinfo == TI_PRINT) {
+ /* Can't just check 'opinfo == OC_PRINT' here, parser ORs
+ * additional bits to opinfos of print/printf with redirects
+ */
+ if ((opinfo & OPCLSMASK) == OC_PRINT) {
if (!op1) {
fputs(getvar_s(intvar[F0]), F);
} else {
testsuite/awk.tests+5 -0
@@ -450,4 +450,9 @@ testing "awk exit N propagates through END's exit" \
"42\n" \
'' ''
+testing "awk print + redirect" \
+ "awk 'BEGIN { print \"STDERR %s\" >\"/dev/stderr\" }' 2>&1" \
+ "STDERR %s\n" \
+ '' ''
+
exit $FAILCOUNT