Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

入力した文字がプロンプトにめり込む状態で CTRL+W で文字を消していくと Panic をおこして nyagos が落ちます #396

Closed
Matsuyanagi opened this issue Dec 11, 2020 · 5 comments
Assignees
Labels

Comments

@Matsuyanagi
Copy link
Contributor

nyagos : 4.4.9_0-windows-amd64
OS : Windows10 1909
WindowsTerminal : 1.4.3243.0

再現手順

  • WindowsTerminal のウインドウを幅80文字程度に広げる。
  • プロンプトに aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk lll mmm nnn ooo ppp qqq rrr sss ttt uuu vvv www xxx yyy zzz をペーストする
  • 先頭の aaa bbb ... が表示されない状態で
  • CTRL+W で単語を消していくと、プロンプトにかかるあたりで Panic が起きます
  • 4.4.8_0, 4.4.5_2 でも起きています
  • WindowsTerminal だけではなく、cmd.exe から nyagos を起動したときも起きています。
    2020-12-12 nyagos
************ Panic Occurred. ***********
runtime error: slice bounds out of range [16:12]
goroutine 1 [running]:
runtime/debug.Stack(0x9555a0, 0xc000216140, 0xc00051d400)
        C:/go/src/runtime/debug/stack.go:24 +0xa5
github.com/zetamatta/nyagos/frame.PanicHandler()
        C:/Users/hymko/go/src/github.com/zetamatta/nyagos/frame/main.go:52 +0x19a
panic(0x8d2540, 0xc00060ae00)
        C:/go/src/runtime/panic.go:969 +0x1c7
github.com/zetamatta/go-readline-ny.(*Buffer).GetWidthBetween(...)
        C:/Users/hymko/go/pkg/mod/github.com/zetamatta/go-readline-ny@v0.2.7/buffer.go:116
github.com/zetamatta/go-readline-ny.(*Buffer).Repaint(0xc000414000, 0xc, 0x4)
        C:/Users/hymko/go/pkg/mod/github.com/zetamatta/go-readline-ny@v0.2.7/repaints.go:45 +0x1ab
github.com/zetamatta/go-readline-ny.keyFuncWordRubout(0x959fc0, 0xc00048c000, 0xc000414000, 0xc000216020)
        C:/Users/hymko/go/pkg/mod/github.com/zetamatta/go-readline-ny@v0.2.7/keyfunc.go:191 +0x1bb
github.com/zetamatta/go-readline-ny.(*KeyGoFuncT).Call(0xc0000049a0, 0x959fc0, 0xc00048c000, 0xc000414000, 0x6)
        C:/Users/hymko/go/pkg/mod/github.com/zetamatta/go-readline-ny@v0.2.7/readline.go:55 +0x53
github.com/zetamatta/go-readline-ny.(*Editor).ReadLine(0xc00038f1a0, 0x959fc0, 0xc00048c000, 0x0, 0x0, 0x0, 0x0)
        C:/Users/hymko/go/pkg/mod/github.com/zetamatta/go-readline-ny@v0.2.7/readline.go:315 +0x4d6
github.com/zetamatta/nyagos/frame.(*CmdStreamConsole).ReadLine(0xc000432780, 0x959fc0, 0xc00048c000, 0x8c2420, 0xc000076a50, 0xacff50, 0x8afa80, 0x955c00, 0x955c00)
        C:/Users/hymko/go/src/github.com/zetamatta/nyagos/frame/stream.go:63 +0x196
github.com/zetamatta/nyagos/mains.(*luaFilterStream).ReadLine(0xc00043e000, 0x959fc0, 0xc00048c000, 0x0, 0xc0000767e0, 0x0, 0xc000383180, 0x0, 0xc000511aa8)
        C:/Users/hymko/go/src/github.com/zetamatta/nyagos/mains/linefilter.go:50 +0x52
github.com/zetamatta/nyagos/shell.(*Shell).ReadCommand(0xc000164900, 0x959fc0, 0xc00048c000, 0xc00048c000, 0xc00025c370, 0x2000, 0x5cd6c5, 0xc000511b48, 0x100)
        C:/Users/hymko/go/src/github.com/zetamatta/nyagos/shell/loop.go:60 +0x137
github.com/zetamatta/nyagos/shell.(*Shell).Loop(0xc000164900, 0x95a080, 0xc0000767e0, 0x957800, 0xc00043e000, 0x0, 0x0, 0x0)
        C:/Users/hymko/go/src/github.com/zetamatta/nyagos/shell/loop.go:84 +0x11f
github.com/zetamatta/nyagos/shell.(*Shell).ForEver(0xc000164900, 0x95a080, 0xc0000767e0, 0x957800, 0xc00043e000, 0xc000164900, 0x95a080)
        C:/Users/hymko/go/src/github.com/zetamatta/nyagos/shell/loop.go:126 +0x65
github.com/zetamatta/nyagos/mains.Main(0x0, 0x0)
        C:/Users/hymko/go/src/github.com/zetamatta/nyagos/mains/nyagos.go:215 +0x639
github.com/zetamatta/nyagos/frame.Start(0x909d20, 0x0, 0x0)
        C:/Users/hymko/go/src/github.com/zetamatta/nyagos/frame/main.go:39 +0x14f
main.main()
        C:/Users/hymko/go/src/github.com/zetamatta/nyagos/main.go:17 +0x72
*** Please copy these error message ***
*** And hit ENTER key to quit.      ***

.nyagos のプロンプトは以下の通りです。

nyagos.env.prompt="[$P]$_$D $T$h$h$h$G"

nyagos.prompt = function(this)
    return nyagos.default_prompt('$e[36;49;1m'..nyagos.env.prompt..'$e[39;49;0m')
end
@hymkor hymkor self-assigned this Dec 11, 2020
@hymkor hymkor added the bug label Dec 11, 2020
@hymkor
Copy link
Collaborator

hymkor commented Dec 12, 2020

丁寧なご報告、ありがとうございます。症状確認しました。一行入力での表示開始位置の更新漏れでした。結果、表示開始のバイト位置よりも左にカーソルのバイト位置がある形となって、前後関係がおかしくなったがゆえにパニックが発生していました。(それが「slice bounds out of range [16:12]

少々お待ちいただけますでしょうか

hymkor added a commit to nyaosorg/go-readline-ny that referenced this issue Dec 13, 2020
hymkor added a commit to nyaosorg/go-readline-ny that referenced this issue Dec 13, 2020
@hymkor
Copy link
Collaborator

hymkor commented Dec 13, 2020

@Matsuyanagi さん:

こちらで直っているかと存じます。

当初は落ちないだけの必要最小限の修正だけを行ったのですが、実行後(不具合ではないが不親切な)「プロンプトだけの画面」になってしまうので、入力テキストが最大限表示されるように表示開始位置とカーソル位置を更新するようにしました

本件は結構な致命的不具合なのでリリース版(4.4.9_1?)も早々に出したいのですが、現在仕掛中の別件の不具合も合わせて修正したいので、もう少々お待ちいただけますでしょうか。

以上、よろしくお願いいたします。

hymkor added a commit that referenced this issue Dec 13, 2020
@Matsuyanagi
Copy link
Contributor Author

nyagos 1.0.1507 で修正されていることを確認しました。

もちろん 現在仕掛中の別件 対応の後でかまいませんのでご都合に合わせてください。

早急な対応ありがとうございました。

@hymkor
Copy link
Collaborator

hymkor commented Dec 21, 2020

本修正を取り込んだバージョンを公開しました。

@Matsuyanagi
Copy link
Contributor Author

4.4.9_1 で修正されていることを確認しました。
対応ありがとうございました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants