From 4195a1da9fffec4451cc10de6b12b4751fc31b56 Mon Sep 17 00:00:00 2001 From: Andrew Gillis <11790789+gammazero@users.noreply.github.com> Date: Tue, 8 Jul 2025 09:00:28 -0700 Subject: [PATCH] fix: handling of EDITOR env var (#10855) The `ipfs config edit` command did not correctly handle the `EDITOR` environment variable correctly when its value contains flags and arguments, i.e. `EDITOR=emacs -nw`. The command was treating the entire value of `$EDITOR` as the name of the editor command. This has been fixed to parse the value of `$EDITOR` into separate args, respecting shell quoting. Closes #9375 --- core/commands/config.go | 17 ++++++++++++----- docs/changelogs/v0.36.md | 5 +++++ go.mod | 1 + go.sum | 2 ++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/core/commands/config.go b/core/commands/config.go index 9d37111c3..7d5a5fa17 100644 --- a/core/commands/config.go +++ b/core/commands/config.go @@ -9,13 +9,13 @@ import ( "os/exec" "strings" - "github.com/ipfs/kubo/core/commands/cmdenv" - "github.com/ipfs/kubo/repo" - "github.com/ipfs/kubo/repo/fsrepo" - + "github.com/anmitsu/go-shlex" "github.com/elgris/jsondiff" cmds "github.com/ipfs/go-ipfs-cmds" config "github.com/ipfs/kubo/config" + "github.com/ipfs/kubo/core/commands/cmdenv" + "github.com/ipfs/kubo/repo" + "github.com/ipfs/kubo/repo/fsrepo" ) // ConfigUpdateOutput is config profile apply command's output @@ -512,7 +512,14 @@ func editConfig(filename string) error { return errors.New("ENV variable $EDITOR not set") } - cmd := exec.Command(editor, filename) + editorAndArgs, err := shlex.Split(editor, true) + if err != nil { + return fmt.Errorf("cannot parse $EDITOR value: %s", err) + } + editor = editorAndArgs[0] + args := append(editorAndArgs[1:], filename) + + cmd := exec.Command(editor, args...) cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr return cmd.Run() } diff --git a/docs/changelogs/v0.36.md b/docs/changelogs/v0.36.md index 7137180bd..2e977f79b 100644 --- a/docs/changelogs/v0.36.md +++ b/docs/changelogs/v0.36.md @@ -18,6 +18,7 @@ This release was brought to you by the [Interplanetary Shipyard](https://ipship - [Overwrite option for files cp command](#overwrite-option-for-files-cp-command) - [Option for filestore command to remove bad blocks](#option-for-filestore-command-to-remove-bad-blocks) - [`ConnMgr.SilencePeriod` configuration setting exposed](#connmgrsilenceperiod-configuration-setting-exposed) + - [Fix handling of EDITOR env var](#fix-handling-of-editor-env-var) - [๐ฆ๏ธ Important dependency updates](#-important-dependency-updates) - [๐ Changelog](#-changelog) - [๐จโ๐ฉโ๐งโ๐ฆ Contributors](#-contributors) @@ -79,6 +80,10 @@ The `filestore` command has a new option, `--remove-bad-blocks`, to verify objec This connection manager option controls how often connections are swept and potentially terminated. See the [ConnMgr documentation](https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmconnmgrsilenceperiod). +#### Fix handling of EDITOR env var + +The `ipfs config edit` command did not correctly handle the `EDITOR` environment variable correctly when its value contains flags and arguments, i.e. `EDITOR=emacs -nw`. The command was treating the entire value of `$EDITOR` as the name of the editor command. This has been fixed to parse the value of `$EDITOR` into separate args, respecting shell quoting. + #### ๐ฆ๏ธ Important dependency updates - update `go-libp2p` to [v0.42.0](https://github.com/libp2p/go-libp2p/releases/tag/v0.42.0) diff --git a/go.mod b/go.mod index 77bc12fc2..a9bd58174 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.24 require ( bazil.org/fuse v0.0.0-20200117225306-7b5117fecadc contrib.go.opencensus.io/exporter/prometheus v0.4.2 + github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 github.com/blang/semver/v4 v4.0.0 github.com/caddyserver/certmagic v0.21.6 github.com/cenkalti/backoff/v4 v4.3.0 diff --git a/go.sum b/go.sum index 943c6a7e2..368d2f8bc 100644 --- a/go.sum +++ b/go.sum @@ -66,6 +66,7 @@ github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b h1:mimo19zliBX/vS github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs= github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 h1:iW0a5ljuFxkLGPNem5Ui+KBjFJzKg4Fv2fnxe4dvzpM= github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h1:Y2QMoi1vgtOIfc+6DhrMOGkLoGzqSV2rKp4Sm+opsyA= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= @@ -180,6 +181,7 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/filecoin-project/go-clock v0.1.0 h1:SFbYIM75M8NnFm1yMHhN9Ahy3W5bEZV9gd6MPfXbKVU= github.com/filecoin-project/go-clock v0.1.0/go.mod h1:4uB/O4PvOjlx1VCMdZ9MyDZXRm//gkj1ELEbxfI1AZs= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= -- GitLab