GNU bug report logs -
#62982
Command-line parsing fails if parameters contain spaces
Previous Next
Reported by: Jacob Bachmeyer <jcb <at> gnu.org>
Date: Fri, 21 Apr 2023 02:04:01 UTC
Severity: normal
Done: Jacob Bachmeyer <jcb62281 <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Forwarding problem report to assign a bug number to this.
In brief, the code that restores certain variables assigned as a result
of the command line arguments fails if any of those values contain
whitespace. This is a problem becuase the --target_board option can
legitimately be a list of mulitple targets to run.
-- Jacob
[Message part 2 (message/rfc822, inline)]
From: Christoph Müllner <christoph.muellner <at> vrull.eu>
A recent change (5fafcd43) introduced a command line argument cache,
that ensures that command line arguments have a higher priority
than configuration files.
That cache uses the following code to save and restore:
save_cmd_var:
upvar 1 $name target_var
restore_cmd_vars"
uplevel 1 set $name $value
This works well unless $value becomes a multi-word string
(i.e. a string that contains spaces), because in this case
the command becomes:
uplevel 1 set $name arg-word0 arg-word1 ...
Obviously this will trigger the following error:
wrong # args: should be "set varName ?newValue?"
Quoting "$value" does not help, because the quotes are evaluated before
executing set.
Let's fix this by using upvar for the restore code as well:
upvar 1 $name target_var
set $target_var "$value"
Here, the quotes will be evaluated when executing the set command.
This has been reported in a downstream project, where this bug prevented
running the GCC regression tests when building in multilib
configuration:
https://github.com/riscv-collab/riscv-gnu-toolchain/issues/1201
The actual command in this report was:
set target_list riscv-sim/-march=rv32imac/-mabi=ilp32/-mcmodel=medlow \
riscv-sim/-march=rv32imafdc/-mabi=ilp32d/-mcmodel=medlow \
riscv-sim/-march=rv64imac/-mabi=lp64/-mcmodel=medlow \
riscv-sim/-march=rv64imafdc/-mabi=lp64d/-mcmod
Signed-off-by: Christoph Müllner <christoph.muellner <at> vrull.eu>
---
runtest.exp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/runtest.exp b/runtest.exp
index 7c6018f..0829fda 100644
--- a/runtest.exp
+++ b/runtest.exp
@@ -432,7 +432,8 @@ namespace eval ::dejagnu::command_line {
variable cmd_var_list
foreach {name value} $cmd_var_list {
- uplevel 1 set $name $value
+ upvar 1 $name target_var
+ set $target_var "$value"
}
verbose "Variables set by command line arguments restored." 4
}
--
2.39.2
This bug report was last modified 2 years and 27 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.