Skip to content

Commit 5b2e84d

Browse files
lumtisilgooz
andauthored
fix: prevent using invalid field name for type/packet/message (ignite#842)
Co-authored-by: İlker G. Öztürk <ilkergoktugozturk@gmail.com>
1 parent d5a754f commit 5b2e84d

File tree

3 files changed

+43
-7
lines changed

3 files changed

+43
-7
lines changed

starport/services/scaffolder/message.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ func (s *Scaffolder) AddMessage(moduleName string, msgName string, msgDesc strin
5252
}
5353

5454
// Parse provided fields
55-
parsedMsgFields, err := parseFields(fields)
55+
parsedMsgFields, err := parseFields(fields, isForbiddenMessageField)
5656
if err != nil {
5757
return err
5858
}
59-
parsedResFields, err := parseFields(resField)
59+
parsedResFields, err := parseFields(resField, isGoReservedWord)
6060
if err != nil {
6161
return err
6262
}
@@ -109,6 +109,7 @@ func (s *Scaffolder) AddMessage(moduleName string, msgName string, msgDesc strin
109109
return fmtProject(pwd)
110110
}
111111

112+
// isMsgCreated checks if the message is already scaffolded
112113
func isMsgCreated(appPath, moduleName, msgName string) (isCreated bool, err error) {
113114
absPath, err := filepath.Abs(filepath.Join(
114115
appPath,
@@ -129,3 +130,12 @@ func isMsgCreated(appPath, moduleName, msgName string) (isCreated bool, err erro
129130

130131
return true, err
131132
}
133+
134+
// isForbiddenTypeField returns true if the name is forbidden as a message name
135+
func isForbiddenMessageField(name string) bool {
136+
if name == "creator" {
137+
return true
138+
}
139+
140+
return isGoReservedWord(name)
141+
}

starport/services/scaffolder/packet.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ func (s *Scaffolder) AddPacket(moduleName string, packetName string, packetField
6464
}
6565

6666
// Parse packet fields
67-
parsedPacketFields, err := parseFields(packetFields)
67+
parsedPacketFields, err := parseFields(packetFields, isForbiddenPacketField)
6868
if err != nil {
6969
return err
7070
}
7171

7272
// Parse acknowledgment fields
73-
parsedAcksFields, err := parseFields(ackFields)
73+
parsedAcksFields, err := parseFields(ackFields, isGoReservedWord)
7474
if err != nil {
7575
return err
7676
}
@@ -140,3 +140,16 @@ func isPacketCreated(appPath, moduleName, packetName string) (isCreated bool, er
140140

141141
return true, err
142142
}
143+
144+
// isForbiddenPacketField returns true if the name is forbidden as a packet name
145+
func isForbiddenPacketField(name string) bool {
146+
switch name {
147+
case
148+
"sender",
149+
"port",
150+
"channelID":
151+
return true
152+
}
153+
154+
return isGoReservedWord(name)
155+
}

starport/services/scaffolder/type.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func (s *Scaffolder) AddType(addTypeOptions AddTypeOption, moduleName string, st
6969
}
7070

7171
// Parse provided field
72-
tFields, err := parseFields(fields)
72+
tFields, err := parseFields(fields, isForbiddenTypeField)
7373
if err != nil {
7474
return err
7575
}
@@ -131,7 +131,7 @@ func (s *Scaffolder) AddType(addTypeOptions AddTypeOption, moduleName string, st
131131
}
132132

133133
// parseFields parses the provided fields, analyses the types and checks there is no duplicated field
134-
func parseFields(fields []string) ([]typed.Field, error) {
134+
func parseFields(fields []string, isForbiddenField func(string) bool) ([]typed.Field, error) {
135135
// Used to check duplicated field
136136
existingFields := make(map[string]bool)
137137

@@ -141,7 +141,7 @@ func parseFields(fields []string) ([]typed.Field, error) {
141141
name := fs[0]
142142

143143
// Ensure the field name is not a Go reserved name, it would generate an incorrect code
144-
if isGoReservedWord(name) {
144+
if isForbiddenField(name) {
145145
return tFields, fmt.Errorf("%s can't be used as a field name", name)
146146
}
147147

@@ -222,6 +222,19 @@ func isMsgServerDefined(appPath, moduleName string) (bool, error) {
222222
return true, err
223223
}
224224

225+
// isForbiddenTypeField returns true if the name is forbidden as a field name
226+
func isForbiddenTypeField(name string) bool {
227+
switch name {
228+
case
229+
"id",
230+
"index",
231+
"creator":
232+
return true
233+
}
234+
235+
return isGoReservedWord(name)
236+
}
237+
225238
func isGoReservedWord(name string) bool {
226239
// Check keyword or literal
227240
if token.Lookup(name).IsKeyword() {

0 commit comments

Comments
 (0)