Skip to content

Commit 23602c1

Browse files
authored
autofree,flag: fix double free in FlagParser free (#25336)
1 parent 16c9bf2 commit 23602c1

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

‎vlib/flag/flag.v‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,6 @@ pub mut:
107107
@[unsafe]
108108
fn (mut f FlagParser) free() {
109109
unsafe {
110-
for a in f.args {
111-
a.free()
112-
}
113-
f.args.free()
114110
//
115111
for flag in f.flags {
116112
flag.free()
@@ -130,6 +126,7 @@ pub const underline = '-----------------------------------------------'
130126
pub const max_args_number = 4048
131127

132128
// new_flag_parser - create a new flag parser for the given args.
129+
@[manualfree]
133130
pub fn new_flag_parser(args []string) &FlagParser {
134131
original_args := args.clone()
135132
idx_dashdash := args.index('--')

‎vlib/flag/flag_autofree_test.v‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// vtest vflags: -autofree
2+
import flag
3+
import os
4+
5+
fn test_main() {
6+
mut fp := flag.new_flag_parser(os.args)
7+
test := fp.string('test', 0, '', 'this is a test')
8+
fp.finalize() or { return }
9+
println(test)
10+
}

0 commit comments

Comments
 (0)