abiosoft / abiosoft/ishell

History file handle leak

Open
#113 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Go
Stars
1.8k
Forks
213
PR merge metrics
No merged PRs in 30d

Description

The history file is not closed when it is reset, resulting in leaked file handles.

Here's a program that demonstrates the bug:
```
package main

import "gopkg.in/abiosoft/ishell.v2"

func main() {
shell := ishell.New()

shell.AddCmd(&ishell.Cmd{
Name: "on",
Func: func(ctx *ishell.Context) {
shell.SetHistoryPath("test-history")
},
})
shell.AddCmd(&ishell.Cmd{
Name: "off",
Func: func(ctx *ishell.Context) {
shell.SetHistoryPath("")
},
})

shell.Run()
}
```

By watching the output of `lsof -c main` on *nix can see that every call to `on` leaves the previous history file handle open. `off` does not close the existing file handle either.

It seems you need something like:
```
diff --git a/ishell.go b/ishell.go
index 098af06..c0545c1 100644
--- a/ishell.go
+++ b/ishell.go
@@ -393,6 +393,7 @@ func (s *Shell) SetHistoryPath(path string) {
// Instance.
config := s.reader.scanner.Config.Clone()
config.HistoryFile = path
+ s.reader.scanner.Close()
s.reader.scanner, _ = readline.NewEx(config)
}
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.