1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

cli: fix a panic and an infinite loop, when command flag descriptions have multiple lines (#17981)

This commit is contained in:
Felipe Pena 2023-04-18 06:37:26 -03:00 committed by GitHub
parent a84fddbb91
commit 8445642567
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 2 deletions

25
vlib/cli/cli_test.v Normal file
View File

@ -0,0 +1,25 @@
module main
import cli { Command, Flag }
fn test_long_description() {
mut cmd := Command{
name: 'cli'
description: 'An example of the cli library.'
version: '1.0.0'
}
mut greet_cmd := Command{
name: 'greet'
description: 'Prints greeting in different languages.'
usage: '<name>'
required_args: 1
}
greet_cmd.add_flag(Flag{
flag: .string_array
name: 'fun'
description: '\'{"uri":"mqtt://broker.emqx.io:1883","topic":"test_emq/1","filters":[{"producer_id":0,"trace_group":2,"string_id":3001},{"string_id":3002}]}\''
})
cmd.add_command(greet_cmd)
cmd.setup()
cmd.parse(['cli', 'greet', '-help'])
}

View File

@ -153,8 +153,8 @@ fn pretty_description(s string, indent_len int) string {
mut i := chars_per_line - 2 mut i := chars_per_line - 2
mut j := 0 mut j := 0
for ; i < line.len; i += chars_per_line - 2 { for ; i < line.len; i += chars_per_line - 2 {
for line[i] != ` ` { for j > 0 && line[j] != ` ` {
i-- j--
} }
// indent was already done the first iteration // indent was already done the first iteration
if j != 0 { if j != 0 {