awk: fix use after free (CVE-2022-30065)
No binary (build failed)
—
(log yok)
| @@ -3128,6 +3128,9 @@ static var *evaluate(node *op, var *res) | |
| case XC( OC_MOVE ): | |
| debug_printf_eval("MOVE\n"); | |
| + | /* make sure that we never return a temp var */ |
| + | if (L.v == TMPVAR0) |
| + | L.v = res; |
| /* if source is a temporary string, jusk relink it to dest */ | |
| if (R.v == TMPVAR1 | |
| && !(R.v->type & VF_NUMBER) | |
| @@ -479,4 +479,10 @@ testing 'awk backslash+newline eaten with no trace' \ | |
| "Hello world\n" \ | |
| '' '' | |
| + | testing 'awk assign while test' \ |
| + | "awk '\$1==\$1=\"foo\" {print \$1}'" \ |
| + | "foo\n" \ |
| + | "" \ |
| + | "foo" |
| + | |
| exit $FAILCOUNT | |