Merge branch 'js/fix-open-exec'
This addresses CVE-2025-46835, Git GUI can create and overwrite a user's files: When a user clones an untrusted repository and is tricked into editing a file located in a maliciously named directory in the repository, then Git GUI can create and overwrite files for which the user has write permission. Signed-off-by: Johannes Sixt <j6t@kdbg.org>
This commit is contained in:
@@ -202,7 +202,7 @@ proc show_other_diff {path w m cont_info} {
|
||||
set sz [string length $content]
|
||||
}
|
||||
file {
|
||||
set fd [open $path r]
|
||||
set fd [safe_open_file $path r]
|
||||
fconfigure $fd \
|
||||
-eofchar {} \
|
||||
-encoding [get_path_encoding $path]
|
||||
@@ -226,7 +226,7 @@ proc show_other_diff {path w m cont_info} {
|
||||
$ui_diff insert end \
|
||||
"* [mc "Git Repository (subproject)"]\n" \
|
||||
d_info
|
||||
} elseif {![catch {set type [exec file $path]}]} {
|
||||
} elseif {![catch {set type [safe_exec [list file $path]]}]} {
|
||||
set n [string length $path]
|
||||
if {[string equal -length $n $path $type]} {
|
||||
set type [string range $type $n end]
|
||||
@@ -338,7 +338,7 @@ proc start_show_diff {cont_info {add_opts {}}} {
|
||||
}
|
||||
}
|
||||
|
||||
if {[catch {set fd [eval git_read --nice $cmd]} err]} {
|
||||
if {[catch {set fd [git_read_nice $cmd]} err]} {
|
||||
set diff_active 0
|
||||
unlock_index
|
||||
ui_status [mc "Unable to display %s" [escape_path $path]]
|
||||
@@ -617,7 +617,7 @@ proc apply_or_revert_hunk {x y revert} {
|
||||
|
||||
if {[catch {
|
||||
set enc [get_path_encoding $current_diff_path]
|
||||
set p [eval git_write $apply_cmd]
|
||||
set p [git_write $apply_cmd]
|
||||
fconfigure $p -translation binary -encoding $enc
|
||||
puts -nonewline $p $wholepatch
|
||||
close $p} err]} {
|
||||
@@ -853,7 +853,7 @@ proc apply_or_revert_range_or_line {x y revert} {
|
||||
|
||||
if {[catch {
|
||||
set enc [get_path_encoding $current_diff_path]
|
||||
set p [eval git_write $apply_cmd]
|
||||
set p [git_write $apply_cmd]
|
||||
fconfigure $p -translation binary -encoding $enc
|
||||
puts -nonewline $p $current_diff_header
|
||||
puts -nonewline $p $wholepatch
|
||||
@@ -890,7 +890,7 @@ proc undo_last_revert {} {
|
||||
|
||||
if {[catch {
|
||||
set enc $last_revert_enc
|
||||
set p [eval git_write $apply_cmd]
|
||||
set p [git_write $apply_cmd]
|
||||
fconfigure $p -translation binary -encoding $enc
|
||||
puts -nonewline $p $last_revert
|
||||
close $p} err]} {
|
||||
|
||||
Reference in New Issue
Block a user