gitk: sanitize 'exec' arguments: 'eval exec'

Convert calls of 'exec' where the arguments are already available in a list and 'eval' is used to unpack the list. Use 'concat' to unite the arguments into a single list before passing them to 'safe_exec'. Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Taylor Blau <me@ttaylorr.com>

Johannes Sixt committed Mar 29, 2025 at 16:51 UTC 88139a617f3fe768ff8d026031811855906b69bc
1 file changed +6 -6
gitk
+6 -6
@@ -339,7 +339,7 @@ proc parseviewrevs {view revs} {
339 } elseif {[lsearch -exact $revs --all] >= 0} {
340 lappend revs HEAD
341 }
342 - if {[catch {set ids [eval exec git rev-parse $revs]} err]} {
342 + if {[catch {set ids [safe_exec [concat git rev-parse $revs]]} err]} {
343 # we get stdout followed by stderr in $err
344 # for an unknown rev, git rev-parse echoes it and then errors out
345 set errlines [split $err "\n"]
@@ -9494,7 +9494,7 @@ proc copyreference {} {
9494 if {$autosellen < 40} {
9495 lappend cmd --abbrev=$autosellen
9496 }
9497 - set reference [eval exec $cmd $rowmenuid]
9497 + set reference [safe_exec [concat $cmd $rowmenuid]]
9498
9499 clipboard clear
9500 clipboard append $reference
@@ -9648,7 +9648,7 @@ proc mkbrgo {top} {
9648 nowbusy newbranch
9649 update
9650 if {[catch {
9651 - eval exec git branch $cmdargs
9651 + safe_exec [concat git branch $cmdargs]
9652 } err]} {
9653 notbusy newbranch
9654 error_popup $err
@@ -9689,7 +9689,7 @@ proc mvbrgo {top prevname} {
9689 nowbusy renamebranch
9690 update
9691 if {[catch {
9692 - eval exec git branch $cmdargs
9692 + safe_exec [concat git branch $cmdargs]
9693 } err]} {
9694 notbusy renamebranch
9695 error_popup $err
@@ -12279,7 +12279,7 @@ proc cache_gitattr {attr pathlist} {
12279 while {$newlist ne {}} {
12280 set head [lrange $newlist 0 [expr {$lim - 1}]]
12281 set newlist [lrange $newlist $lim end]
12282 - if {![catch {set rlist [eval exec git check-attr $attr -- $head]}]} {
12282 + if {![catch {set rlist [safe_exec [concat git check-attr $attr -- $head]]}]} {
12283 foreach row [split $rlist "\n"] {
12284 if {[regexp "(.*): $attr: (.*)" $row m path value]} {
12285 if {[string index $path 0] eq "\""} {
@@ -12581,7 +12581,7 @@ if {$selecthead eq "HEAD"} {
12581 if {$i >= [llength $argv] && $revtreeargs ne {}} {
12582 # no -- on command line, but some arguments (other than --argscmd)
12583 if {[catch {
12584 - set f [eval exec git rev-parse --no-revs --no-flags $revtreeargs]
12584 + set f [safe_exec [concat git rev-parse --no-revs --no-flags $revtreeargs]]
12585 set cmdline_files [split $f "\n"]
12586 set n [llength $cmdline_files]
12587 set revtreeargs [lrange $revtreeargs 0 end-$n]