From 475836bbb725906e2c938e5dda045a39e462686c Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Mon, 21 Apr 2025 21:59:03 -0300 Subject: [PATCH] parser: fix invalid field name checking (fix #24279) (#24283) --- vlib/v/parser/struct.v | 5 +++++ vlib/v/parser/tests/invalid_field_name_err.out | 5 +++++ vlib/v/parser/tests/invalid_field_name_err.vv | 3 +++ 3 files changed, 13 insertions(+) create mode 100644 vlib/v/parser/tests/invalid_field_name_err.out create mode 100644 vlib/v/parser/tests/invalid_field_name_err.vv diff --git a/vlib/v/parser/struct.v b/vlib/v/parser/struct.v index b2677b0ad..21b2ba4c9 100644 --- a/vlib/v/parser/struct.v +++ b/vlib/v/parser/struct.v @@ -218,6 +218,11 @@ fn (mut p Parser) struct_decl(is_anon bool) ast.StructDecl { } if is_embed { + if p.peek_tok.kind == .dot && p.peek_tok.line_nr == p.peek_token(3).line_nr + && p.peek_token(3).kind == .name { + p.error_with_pos('invalid field name', p.tok.pos()) + return ast.StructDecl{} + } // struct embedding type_pos = p.tok.pos() typ = p.parse_type() diff --git a/vlib/v/parser/tests/invalid_field_name_err.out b/vlib/v/parser/tests/invalid_field_name_err.out new file mode 100644 index 000000000..4a41fa1bd --- /dev/null +++ b/vlib/v/parser/tests/invalid_field_name_err.out @@ -0,0 +1,5 @@ +vlib/v/parser/tests/invalid_field_name_err.vv:2:2: error: invalid field name + 1 | struct MyStruct { + 2 | c.close int + | ^ + 3 | } diff --git a/vlib/v/parser/tests/invalid_field_name_err.vv b/vlib/v/parser/tests/invalid_field_name_err.vv new file mode 100644 index 000000000..0a696db9a --- /dev/null +++ b/vlib/v/parser/tests/invalid_field_name_err.vv @@ -0,0 +1,3 @@ +struct MyStruct { + c.close int +} \ No newline at end of file -- 2.39.5